- Humans build and fix systems.
- Humans get tired and stressed, they feel happy and sad.
- Systems don't have feelings yet. They only have SLAs.
- Humans need to switch off and on again.
- The wellbeing of human operators impacts the reliability of systems.
- Alert Fatigue == Human Fatigue
- Automate as much as possible, escalate to a human as a last resort.
- Document everything. Train everyone. Save time.
- Kill the shame game.
- Human issues are system issues.
by Bjørn Friese
Beautiful is better than ugly. Explicit is better than implicit.
I frequently deal with collections of things in the programs I write. Collections of droids, jedis, planets, lightsabers, starfighters, etc. When programming in Python, these collections of things are usually represented as lists, sets and dictionaries. Oftentimes, what I want to do with collections is to transform them in various ways. Comprehensions is a powerful syntax for doing just that. I use them extensively, and it's one of the things that keep me coming back to Python. Let me show you a few examples of the incredible usefulness of comprehensions.
Picking the right architecture = Picking the right battles + Managing trade-offs
- Clarify and agree on the scope of the system
- User cases (description of sequences of events that, taken together, lead to a system doing something useful)
- Who is going to use it?
- How are they going to use it?
No, seriously, don't. You're probably reading this because you've asked what VPN service to use, and this is the answer.
Note: The content in this post does not apply to using VPN for their intended purpose; that is, as a virtual private (internal) network. It only applies to using it as a glorified proxy, which is what every third-party "VPN provider" does.
- A Russian translation of this article can be found here, contributed by Timur Demin.
- A Turkish translation can be found here, contributed by agyild.
- There's also this article about VPN services, which is honestly better written (and has more cat pictures!) than my article.
from random import randint, random | |
from math import floor | |
def fisher_yates_shuffle(the_list): | |
list_range = range(0, len(the_list)) | |
for i in list_range: | |
j = randint(list_range[0], list_range[-1]) | |
the_list[i], the_list[j] = the_list[j], the_list[i] | |
return the_list |
In some cases the IC might determine that a PM meeting for the incident isn't needed.
If the IC decides to waive the meeting please replace the Meeting
section with a
note indicating the meeting has been waived (example: Meeting waived: Paul Mooring
)
diff --git a/include/net/tcp.h b/include/net/tcp.h | |
--- a/include/net/tcp.h | |
+++ b/include/net/tcp.h | |
@@ -285,6 +285,7 @@ | |
extern int sysctl_tcp_adv_win_scale; | |
extern int sysctl_tcp_tw_reuse; | |
extern int sysctl_tcp_frto; | |
+extern int sysctl_tcp_syn_acceptq_pct; | |
extern int sysctl_tcp_low_latency; | |
extern int sysctl_tcp_dma_copybreak; |
A checklist for designing and developing internet scale services, inspired by James Hamilton's 2007 paper "On Desgining and Deploying Internet-Scale Services."
- Does the design expect failures to happen regularly and handle them gracefully?
- Have we kept things as simple as possible?
I have moved this over to the Tech Interview Cheat Sheet Repo and has been expanded and even has code challenges you can run and practice against!
\
L1 cache reference ......................... 0.5 ns
Branch mispredict ............................ 5 ns on recent CPU
L2 cache reference ........................... 7 ns 14x L1 cache
Mutex lock/unlock ........................... 25 ns
Main memory reference ...................... 100 ns 20x L2 cache, 200x L1 cache
Compress 1K bytes with Zippy ............. 3,000 ns = 3 µs
Send 2K bytes over 1 Gbps network ....... 20,000 ns = 20 µs
SSD random read ........................ 150,000 ns = 150 µs
Read 1 MB sequentially from memory ..... 250,000 ns = 250 µs 4X memory