Skip to content

Instantly share code, notes, and snippets.

View Matrix278's full-sized avatar
πŸ’»
Coding

Martin Sidorov Matrix278

πŸ’»
Coding
View GitHub Profile

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.

@Matrix278
Matrix278 / effective_go.md
Last active July 16, 2024 06:44
Effective go minimized

Effective Go Summary

The link to Effective Go documentation

Package Names

When importing a package in Go, the package name becomes the access point for its contents. It's recommended to use short, concise, and evocative names to facilitate ease of use. Package names are typically lower case and single-word to minimize typing. If there's a naming collision, importing packages can locally rename them to avoid conflicts. Package names derive from the base name of their source directory, like "encoding/base64" imported as "base64".

Example:

Title:
Incident date:
Owner:
Peer-review committee:
Tags:
Summary:
Supporting data:
Customer Impact:
Incident Response Analysis:
Post-Incident Analysis:
@Matrix278
Matrix278 / std.md
Created May 14, 2024 18:21 — forked from tonibardina/std.md
Git Commit Message Standard

Merged from https://github.com/joelparkerhenderson/git_commit_message and https://chris.beams.io/posts/git-commit/

General Rules

  • Commit messages must have a subject line and may have body copy. These must be separated by a blank line.
  • The subject line must not exceed 50 characters
  • The subject line should be capitalized and must not end in a period
  • The subject line must be written in imperative mood (Fix, not Fixed / Fixes etc.)
  • The body copy must be wrapped at 72 columns
  • The body copy must only contain explanations as to what and why, never how. The latter belongs in documentation and implementation.
@Matrix278
Matrix278 / .gitattributes
Created December 30, 2023 17:30 — forked from nemotoo/.gitattributes
.gitattributes for Unity3D with git-lfs
## Unity ##
*.cs diff=csharp text
*.cginc text
*.shader text
*.mat merge=unityyamlmerge eol=lf
*.anim merge=unityyamlmerge eol=lf
*.unity merge=unityyamlmerge eol=lf
*.prefab merge=unityyamlmerge eol=lf
@Matrix278
Matrix278 / update-golang.md
Created April 8, 2022 07:51 — forked from nikhita/update-golang.md
How to update the Go version

How to update the Go version

System: Debian/Ubuntu/Fedora. Might work for others as well.

1. Uninstall the exisiting version

As mentioned here, to update a go version you will first need to uninstall the original version.

To uninstall, delete the /usr/local/go directory by:

@Matrix278
Matrix278 / git_assume_unchanged.md
Created September 4, 2021 16:07
Git assume unchanged file
@Matrix278
Matrix278 / clean_code.md
Created June 13, 2021 15:10 — forked from wojteklu/clean_code.md
Summary of 'Clean code' by Robert C. Martin

Code is clean if it can be understood easily – by everyone on the team. Clean code can be read and enhanced by a developer other than its original author. With understandability comes readability, changeability, extensibility and maintainability.


General rules

  1. Follow standard conventions.
  2. Keep it simple stupid. Simpler is always better. Reduce complexity as much as possible.
  3. Boy scout rule. Leave the campground cleaner than you found it.
  4. Always find root cause. Always look for the root cause of a problem.

Design rules