Skip to content

Instantly share code, notes, and snippets.

View jonathankau's full-sized avatar
🍊

Jonathan Kau jonathankau

🍊
View GitHub Profile
@rfikki
rfikki / ropsten-peers-latest.txt
Last active September 24, 2022 03:23
Updated July 15, 2020: Ropsten Latest Peers with Istanbul - IMPORTANT RUN THE LATEST RELEASE OF THE CLIENT - https://geth.ethereum.org/downloads/
admin.addPeer("enode://8c5131f577ee602ccaad5e5f600011c024d43d33e6af6f8a89ed26cbfadd7efe903a8e426dde4071b857e0838a2efa29ae3b268f8b55acd59e72d4a919673cbc@13.251.47.174:30303");
admin.addPeer("enode://798b8eba7b65cdd71bb061a6b18a1f7d16612d54e1aa542d8dc5c3573322b5dd7496c1eea100dbb84f8495d89f3d5ddb4142b0006a73cd32daa2f643bd5d1c76@175.24.29.183:30311");
admin.addPeer("enode://9a4be35fec78cf91e7e959029ae3f5d3d3e86446186eb14f181c8f3b9917f57839ef98d4ba53cf06eb4fea696ecc14796b34d96db4f4294864edfcab27dd9956@31.220.51.107:30303");
admin.addPeer("enode://2763ab6d19d6e7ce7a953ba95c9a87fe6ae5eac3434bf216282f53142d89cb5451faa701311d7de1d79cc8ecbd57f1781156e26f5722aee835547aeab870e385@52.237.88.221:30303");
admin.addPeer("enode://81488a6c0b62aa14a1172d607893b6317e4f2565ca2bd73c7c0b8bfd55842af6b7972218728d1f352b3fddc61d0dccbf92e81d2bbfdc375db44ae44ee332d4db@88.198.59.75:30303");
admin.addPeer("enode://3d55f613d74e90f5b8a4154d20d8a7260a973751c1402bf52adde2b08b72a9e0327a522bf187765f2d6e2a3b893dfe7aa41b204bce5f793bd9470f24fa3aafc
@ttscoff
ttscoff / karabiner.json
Created July 25, 2017 17:09
Example Karabiner Elements setup for Vim navigation keys using Hyper+h/j/k/l
{
"global": {
"check_for_updates_on_startup": true,
"show_in_menu_bar": true,
"show_profile_name_in_menu_bar": false
},
"profiles": [
{
"complex_modifications": {
"parameters": {

Scaling your API with rate limiters

The following are examples of the four types rate limiters discussed in the accompanying blog post. In the examples below I've used pseudocode-like Ruby, so if you're unfamiliar with Ruby you should be able to easily translate this approach to other languages. Complete examples in Ruby are also provided later in this gist.

In most cases you'll want all these examples to be classes, but I've used simple functions here to keep the code samples brief.

Request rate limiter

This uses a basic token bucket algorithm and relies on the fact that Redis scripts execute atomically. No other operations can run between fetching the count and writing the new count.

@joshdover
joshdover / README.md
Last active September 28, 2023 21:38
Idiomatic React Testing Patterns

Idiomatic React Testing Patterns

Testing React components seems simple at first. Then you need to test something that isn't a pure interaction and things seem to break down. These 4 patterns should help you write readable, flexible tests for the type of component you are testing.

Setup

I recommend doing all setup in the most functional way possible. If you can avoid it, don't set variables in a beforeEach. This will help ensure tests are isolated and make things a bit easier to reason about. I use a pattern that gives great defaults for each test example but allows every example to override props when needed:

@yefim
yefim / Dockerrun.aws.json
Last active April 7, 2023 16:11
Build a Docker image, push it to AWS EC2 Container Registry, then deploy it to AWS Elastic Beanstalk
{
"AWSEBDockerrunVersion": "1",
"Image": {
"Name": "<AWS_ACCOUNT_ID>.dkr.ecr.us-east-1.amazonaws.com/<NAME>:<TAG>",
"Update": "true"
},
"Ports": [
{
"ContainerPort": "443"
}
@twolfson
twolfson / README.md
Last active August 1, 2023 10:45
Node.js job queue evaluation

We are building a Node.js service which will need asynchronous support for tasks like sending emails. Here's our evaluation:

@gnz00
gnz00 / src_routes.js
Created October 4, 2015 12:18
React-Nprogress
/*! React Starter Kit | MIT License | http://www.reactstarterkit.com/ */
import React from 'react';
import Router from 'react-routing/src/Router';
import { canUseDOM } from 'fbjs/lib/ExecutionEnvironment';
import http from './core/HttpClient';
import App from './components/App';
import IndexPage from './components/IndexPage';
import NotFoundPage from './components/NotFoundPage';
@henrik
henrik / deploying_phoenix_on_dokku.md
Last active April 14, 2024 00:32
Deploying Elixir's Phoenix Framework on Dokku.

Deploying Phoenix on Dokku

Worked 2015-09-08 for Phoenix 1.0.1 on Dokku 0.3.25.

These instructions assume you've set up Dokku. If not, go find a tutorial for that part. My notes for setting it up on Digital Ocean.

On your local machine, in the app's repo

Create a Dokku app:

@iqiancheng
iqiancheng / SwitchyOmega_Switchy_Rules.txt
Last active November 3, 2018 04:56
this rule list for SwitchyOmega Named "Auto"
[SwitchyOmega Conditions]
@with result
*.googleusercontent.com +direct
*.google.com +Shadowsocks
*.ykimg.com +Shadowsocks
*.facebook.net +Shadowsocks
*.angularjs.org +Shadowsocks
*.kickresume.com +Shadowsocks
*.youtube-nocookie.com +Shadowsocks
@non
non / answer.md
Last active January 9, 2024 22:06
answer @nuttycom

What is the appeal of dynamically-typed languages?

Kris Nuttycombe asks:

I genuinely wish I understood the appeal of unityped languages better. Can someone who really knows both well-typed and unityped explain?

I think the terms well-typed and unityped are a bit of question-begging here (you might as well say good-typed versus bad-typed), so instead I will say statically-typed and dynamically-typed.

I'm going to approach this article using Scala to stand-in for static typing and Python for dynamic typing. I feel like I am credibly proficient both languages: I don't currently write a lot of Python, but I still have affection for the language, and have probably written hundreds of thousands of lines of Python code over the years.