A slick single-purpose site that helps you by writing your nginx config for you.
nginx  devops 
december 2018
How do you cut a monolith in half?
The problem with distributed systems, is that no matter what the question is, the answer is inevitably ‘It Depends’.

When you cut a larger service apart, where you cut depends on latency, resources, and access to state, but it also depends on error handling, availably and recovery processes. It depends, but you probably don’t want to depend on a message broker.
architecture  programming 
october 2018
Write code that's easy to delete, and easy to debug too
Debuggable code is code that doesn’t outsmart you. Some code is a little to harder to debug than others: code with hidden behaviour, poor error handling, ambiguity, too little or too much structure, or code that’s in the middle of being changed. On a large enough project, you’ll eventually bump into code that you don’t understand.
october 2018
Repeat yourself, do more than one thing, and rewrite everything
If you ask a programmer for advice—a terrible idea—they might tell you something like the following: Don’t repeat yourself. Programs should do one thing and one thing well. Never rewrite your code from scratch, ever! [...] The advice isn’t inherently bad—although there is good intent, following it to the letter can create more problems than it promises to solve.
october 2018
Write code that is easy to delete, not easy to extend
To write code that’s easy to delete: repeat yourself to avoid creating dependencies, but don’t repeat yourself to manage them. Layer your code too: build simple-to-use APIs out of simpler-to-implement but clumsy-to-use parts. Split your code: isolate the hard-to-write and the likely-to-change parts from the rest of the code, and each other. Don’t hard code every choice, and maybe allow changing a few at runtime. Don’t try to do all of these things at the same time, and maybe don’t write so much code in the first place.
october 2018
Khan Academy: Engineering career development
Khan Academy's guide to how they level engineers and how to move up in their organization.
(link to their official document is in the article)
july 2018
Rent the Runway: Sharing Our Engineering Ladder
Rent the Runway's guide to how they level their engineers and how to move up in their organization. (link to the official guide is in the article)
july 2018
Patreon Engineering Levels
Patreon's guide to how they measure engineers and how to move up in their organization. (link to official guide is in the article)
july 2018
Optimizing web servers for high throughput and low latency
In this post we’ll be discussing lots of ways to tune web servers and proxies. Please do not cargo-cult them. For the sake of the scientific method, apply them one-by-one, measure their effect, and decide whether they are indeed useful in your environment.
performance  optimization 
may 2018
iridakos - Creating a bash completion script
I recently worked on creating a bash completion script for a project and I enjoyed it very much. In this post I will try to familiarize you with the process of creating a bash completion script.
bash  tutorial 
april 2018
20 lines of code that will beat A/B testing every time
A/B testing is used far too often, for something that performs so badly. It is defective by design: Segment users into two groups. Show the A group the old, tried and true stuff. Show the B group the new whiz-bang design with the bigger buttons and slightly different copy. [...] But it doesn't have to be this way.
testing  web  advice 
march 2018
Demystifying Two Factor Auth
I always wondered how Google Authenticator style 2-factor codes worked. The process of going from QR code to rotating 6-digit pin seemed a bit magical. A few days ago, my curiosity found itself coupled with some free time. Here’s what I found:
python  security 
february 2018
Don’t Get Trampled: The Puzzle For “Unicorn” Employees
How can employees — and prospective employees — protect themselves from late-stage "unicorns" screwing them over with stock options/grants.
investing  startup  stock 
february 2018
Storing hierarchical data: Materialized Path – Bojan Živanović
Web applications often need a way to represent and store hierarchies.
A menu with its submenus. A category with its subcategories. A comment and its replies.
Storing the hierarchy, and later reconstructing it from the stored data is just a part of the puzzle. We also need a way to find the parents or children of an item. We need to be able to re-parent an item (move it to another part of the hierarchy). Finally, there is the need to order items in a way that reflects their position in the hierarchy.
database  programming 
february 2018
Software Structure – Programmer's Compendium
Software systems are built from units provided by the language. Some languages have functions and data; others have classes and objects. Some group these into modules. Some allow all of these types, trying to be everything to everyone. Some have none of these.
february 2018
About that Tech Interview…
Michael Avrukin lays out an interesting idea for a better, higher signal, tech interview process.
february 2018
Questions I'm asking in interviews
In a fit of “open source your interview process”, I tweeted yesterday with the list of questions I’m drawing from when interviewing. A lot of people responded in the gist with amazing suggestions, and I thought I’d consolidate them here so they don’t get lost in my pile of gists.
interview  advice 
february 2018
Django Logging, The Right Way
Good logging is critical to debugging and troubleshooting problems. Not only is it helpful in local development, but in production it's indispensable. When reviewing logs for an issue, it's rare to hear somebody say, "We have too much logging in our app." but common to hear the converse. So, with that in mind, let's get started.
python  django  tutorial 
january 2018
One-upping the NES Classic Edition with the Raspberry Pi 3 and RetroPie
An article/tutorial about how to turn a RaspberryPi into a retro gaming "console".
tutorial  retro  gaming 
november 2017
Inter UI font family
Inter UI is a font for highly legible text on computer screens.
font  typography  free 
november 2017
Pythonic code review
A few tricks and tips for reviewing Python code, with examples of things to look out for and built-in types you can use to solve common problems.
advice  python  code_review 
april 2017
40 Key Computer Science Concepts Explained In Layman’s Terms
To make learning more fun and interesting, here’s a list of important computer science theories and concepts explained with analogies and minimal technical terms. It’s like an ultra-fast-track computer science degree program for everyone, just to get you to understand the general concepts.
programming  article 
april 2017
Positioning Elements on the Web
Positioning layouts in CSS was once a very daunting task, and hacks like using tables for the entire layout were quite common. Over the years, the demand for better layout tools has led to steadily better support and techniques. Today we have options, and learning to manage each of these techniques is the key to creating complex layouts that remain easy to change and flexible enough to handle multiple screen sizes.
css  flexbox  tutorial 
april 2017
101 Questions to Ask in One on Ones « Building Customer Driven SaaS Products
So you’re having one on ones with your team. Awesome. It’s an essential element to being a good manager. But are you making the most of them?

Do you come in prepared and ready to make the most of each one or do some go better than others as you wing it half the time? Are you too dependent on them bringing the agenda? Do you ask the same 3-5 questions every time?

This list will help you make the most of each meeting and have a quick reference when you feel your questions may be getting stale or you have a few minutes left in a one on one.
management  advice 
april 2017
Questions for our first 1:1
In the last few years, I’ve had the pleasure of kicking off lots of new reporting relationships with both engineers and engineering managers. Over time, I’ve learned that getting some particular data during an initial 1:1 can be really helpful, as I can refer back to the answers as I need to give a person feedback, recognize them, and find creative ways to support them. Most of these I’ve stolen from some really amazing Etsy coworkers.
management  advice 
april 2017
The Moderately Enthusiastic Programmer
I feel like I’m practically the poster child for the “passionate programmer”. I code for fun, always have. I’m like the stereotype of the guy who’d be programming even if it didn’t pay. I play with new programming languages for the sheer hell of it. I write and speak about the joy of coding, and try my best to pass that joy along to others as best I can.

And yet… I find myself increasingly uncomfortable with the rhetoric of passion in programming.
february 2017
Code examples in Keynote
The last few weeks I've been working on slides for an upcoming talk I'm giving about Elm. One of the most painful parts has been has been formatting code in a way that's both readable and aesthetically pleasing. If you've spent much time in Keynote or PowerPoint, you know there is no magic button for this. Determined to find an easier way, I polled other Double Agents and have aggregated their collective knowledge
january 2017
Packaging a python library
I think the packaging best practices should be revisited, there are lots of good tools now-days that are either unused or underused. It's generally a good thing to re-evaluate best practices all the time.

I assume here that your package is to be tested on multiple Python versions, with different combinations of dependency versions, settings etc.
python  advice 
january 2017
Google's Python Class
Welcome to Google's Python Class -- this is a free class for people with a little bit of programming experience who want to learn Python. The class includes written materials, lecture videos, and lots of code exercises to practice Python coding. These materials are used within Google to introduce Python to people who have just a little programming experience.
programming  tutorial  python 
december 2016
Microservices – Please, don’t
I’m going to cover a few of the major fallacies and “gotchas” of the Microservices movement, coming from someone who worked at a company that also got swept up in the idea that breaking apart a legacy monolithic application was going to save the day. While I don’t want the takeaway of this blog post to be “Microservices == Bad”, ideally anyone reading this should walk away with a series of issues to think about when deciding if the move to a Microservice based architecture is right for them.
architecture  design  programming 
december 2016
Practical Guide to Securing macOS
This is a collection of thoughts on securing a modern Apple Mac computer using macOS (formerly OS X) 10.12 "Sierra", as well as steps to improving online privacy.
december 2016
Hero Patterns
A collection of repeatable SVG background patterns for you to use on your digital projects.
svg  patterns  design 
october 2016
The Terminal •
OS X Terminal tricks and tips from Craig Hockenberry.
shell  tips  article 
september 2016
Linux Performance Analysis in 60,000 Milliseconds
At Netflix we have a massive EC2 Linux cloud, and numerous performance analysis tools to monitor and investigate its performance. These include Atlas for cloud-wide monitoring, and Vector for on-demand instance analysis. While those tools help us solve most issues, we sometimes need to login to an instance and run some standard Linux performance tools.
devops  linux 
september 2016
Screencasts for programmers
Looking for top-notch screencasts? You are on the right page.`
list  programming 
september 2016
Miguel Grinberg - Flask at Scale - PyCon 2016
Do you think that because Flask is a micro-framework, it must only be good for small, toy-like web applications? Well, not at all! In this tutorial I am going to show you a few patterns and best practices that can take your Flask application to the next level.
python  video  talk 
september 2016
MIT 6.001 Structure and Interpretation, 1986
This course introduces students to the principles of computation. Upon completion of 6.001, students should be able to explain and apply the basic methods from programming languages to analyze computational systems, and to generate computational s...
programming  class  video 
september 2016
Design Principles Behind Smalltalk
The Smalltalk-80 system marks our fifth time through this cycle. In this article, I present some of the general principles we have observed in the course of our work. While the presentation frequently touches on Smalltalk "motherhood", the principles themselves are more general and should prove useful in evaluating other systems and in guiding future work.
programming  design 
september 2016
Understanding Python metaclasses
None of the existing articles [1] give a comprehensive explanation of how metaclasses work in Python so I'm making my own.
python  programming 
august 2016
On Kindness
Just a simple deeper dive into one of @rgladwell's tweets and what he meant by it. Good lessons in here.
august 2016
Game Programming Patterns
Game Programming Patterns is a collection of patterns I found in games that make code cleaner, easier to understand, and faster.

This is the book I wish I had when I started making games, and now I want you to have it.
game_programming  patterns 
august 2016
Collision detection for dummies
This article is a kind of companion article to Physics engines for dummies and talks about the act of actually detecting a collision between two shapes.

This article assumes the reader has a basic grasp of maths and geometry.
physics  game_programming 
august 2016
Physics engines for dummies
This time i'm going to talk about the basic components that make up a physics engine and how to put them together; this tutorial is aimed at programmers who have a basic grasp of maths and geometry but would like to step into the world of simulation.
game_programming  physics 
august 2016
How Physics Engines Work
This article will guide you through the essential physics of game engines. This is not an A-Z “how-to” guide. I’ve left out some major optimization and implementation details; a single article can only cover so much. My true goal is to point you in the right direction and teach the concepts that you’ll need to build upon later. The next step is up to you. I hope you’ll use this article as a springboard and go write your own game engine, researching advanced concepts in the process.
game_programming  physics 
august 2016
Best Practices for Designing a Pragmatic RESTful API
Your data model has started to stabilize and you're in a position to create a public API for your web app. You realize it's hard to make significant changes to your API once it's released and want to get as much right as possible up front. Now, the internet has no shortage on opinions on API design. But, since there's no one widely adopted standard that works in all cases, you're left with a bunch of choices: What formats should you accept? How should you authenticate? Should your API be versioned?
api  rest  opinion 
august 2016
Building with Make
If you are working with web and hybrid applications, you need a build tool. Transpiling code, bundling assets, minifying scripts, and optimizing images are some of the tasks that you perform frequently, and having a decent build system in place saves you a lot of time.
make  programming 
august 2016
My First 10 Minutes On a Server - Primer for Securing Ubuntu
My First 5 Minutes on a Server, by Bryan Kennedy, is an excellent intro into securing a server against most attacks. We have a few modifications to his approach that we wanted to document as part of our efforts of externalizing our processes and best practices. We also wanted to spend a bit more time explaining a few things that younger engineers may benefit from.
linux  security  server  tutorial 
june 2016
My First 5 Minutes On A Server; Or, Essential Security for Linux Servers
Server security doesn’t need to be complicated. My security philosophy is simple: adopt principles that will protect you from the most frequent attack vectors, while keeping administration efficient enough that you won’t develop “security cruft”. If you use your first 5 minutes on a server wisely, I believe you can do that.
linux  security  tutorial 
june 2016
In Python, it's all about the attributes
What are Python attributes, and how are they different from instance/class variables?
python  tutorial 
june 2016
Concurrency in Go, Part II
In Part I of this series, we covered the basics of concurrency in Go: the differences between concurrency and parallelism, and how to implement goroutines, channels, and buffered channels in Go. Armed with those building blocks, we can work on some more sophisticated concurrency patterns by introducing synchronization.
go  tutorial 
june 2016
An Intro to Concurrency Patterns in Go
If you’re curious about the basic concurrency patterns in Go, we’ll cover what concurrency is, and then go over a couple examples to help you understand the pattern. We won’t talk about some of the more in-depth topics around concurrency, like the sync library, using mutexes, etc. Instead, we’ll focus on the building blocks to help you get started.
go  tutorial 
june 2016
Entry-level, synchronous & transactional event sourcing
Event sourcing is an approach in which changes to application state are persistently stored as a stream of immutable events. This is in contrast to typical CRUD applications, where only the "current" state is stored and mutated when commands come into the system.
cqrs  events 
june 2016
The Software Developer’s Library
A treasure trove of books for people who love code. Curated by Eric Elliott.
list  programming 
june 2016
Unintuitive Things I’ve Learned about Management (Part 2)
And yet, despite management being — like parenting— a certain kind of black art with no hard and fast rules, of course there are better and worse managers. A better manager gets better results. You can’t always measure this in weeks, months, or even sometimes years, but it eventually emerges clear as daylight.
june 2016
Unintuitive Things I’ve Learned about Management (Part 1)
And yet, despite management being — like parenting— a certain kind of black art with no hard and fast rules, of course there are better and worse managers. A better manager gets better results. You can’t always measure this in weeks, months, or even sometimes years, but it eventually emerges clear as daylight.
june 2016
Building remote-first teams
A kind of how-to guide for successfully running a remote-first team.
tutorial  remote 
june 2016
Good logging practice in Python
Logging is important for system developing, debugging and running. When a program crashes, if there is no logging record, you have little chance to understand what happened. For example, when you are writing a server, logging is necessary.
programming  python 
june 2016
Running a meetup
A meetup is usually divided into a couple of phases: Before, Arrival, Main and Goodbye. To easily see what there’s to do, the format of this post is slightly different than the others. It’s not so much discussions but more of a check list for each of the phases, so you don’t forget anything.
may 2016
How to Deploy Software
Whenever you make a change to your codebase, there's always going to be a risk that you're about to break something. No one likes downtime, no one likes cranky users, and no one enjoys angry managers. So the act of deploying new code to production tends to be a pretty stressful process. It doesn't have to be as stressful, though
deployment  programming  devops 
may 2016
Cron Best Practices
However, like many older Unix tools, cron(8)‘s simplicity has a drawback: it relies upon the user to know some detail of how it works, and to correctly implement any other safety checking behaviour around it. [...] There are a few ways to make the way you use cron(8) more robust if you’re in a situation where keeping track of the running job is desirable.
cron  linux  best_practices 
may 2016
Apache vs Nginx: Practical Considerations
Apache and Nginx are the two most common open source web servers in the world. Together, they are responsible for serving over 50% of traffic on the internet. Both solutions are capable of handling diverse workloads and working with other software to provide a complete web stack.

While Apache and Nginx share many qualities, they should not be thought of as entirely interchangeable. Each excels in its own way and it is important to understand the situations where you may need to reevaluate your web server of choice. This article will be devoted to a discussion of how each server stacks up in various areas.
apache  nginx 
march 2016
SSH: Best practices at Aris' Blog - Computers, ssh and rock'n roll
I noticed that many people were not aware of some basic features of OpenSSH. I will attempt to give a few advises, prioritized in feasibility order, and with graphical annotations.
devops  linux  security  tutorial  ssh  server 
february 2016
Neat Algorithms - Paxos
This is an explanation and demonstration of an extraordinarily neat algorithm called Paxos. Paxos is a family of algorithms for teaching a whole bunch of decidedly unreliable processes to reliably decide on stuff. More formally: it allows a group of unreliable processors to deterministically and safely reach consensus if some certain conditions can be met, while ensuring the group remains consistent if the conditions can’t be met.
algorithms  reference 
february 2016
The Linux Firewall
There are several firewall applications for Linux, but what you may not realize is that, at the heart of all these programs is a single all-mighty application that is built right into the Linux Kernel: iptables. This is the Linux firewall. No matter which program you use to configure your firewall under Linux, it ultimately all comes down to iptables. All that these other programs do is configure it.
linux  security  tutorial 
february 2016
Game Programming Patterns
Game Programming Patterns is a collection of patterns I found in games that make code cleaner, easier to understand, and faster.
game  programming  patterns  design 
february 2016
Rooms and Mazes: A Procedural Dungeon Generator
Well, I finally got some time to think about my roguelike again and today, I’m here to… keep you hanging. Alas, you are at the mercy of my wandering attention span! Instead of game loops, today we’re going to talk about possibly the most fun and challenging part of making a roguelike: generating dungeons!
game  programming 
february 2016
The Feynman Lectures on Physics
Caltech and The Feynman Lectures Website are pleased to present this online edition of The Feynman Lectures on Physics. Now, anyone with internet access and a web browser can enjoy reading a high quality up-to-date copy of Feynman's legendary lectures.
ebook  physics  lecture 
january 2016
Awk in 20 Minutes
Awk is a tiny programming language and a command line tool. It's particularly appropriate for log parsing on servers, mostly because Awk will operate on files, usually structured in lines of human-readable text.
programming  tutorial  unix 
january 2016
Postgres full-text search is Good Enough!
The search has become an important feature and we've seen a big increase in the popularity of tools like elasticsearch and SOLR which are both based on lucene. They are great tools but before going down the road of Weapons of Mass Search, maybe what you need is something a bit lighter which is simply good enough!
postgres  database  search  tutorial 
january 2016
Choosing an HTTP Status Code — Stop Making It Hard
A visual decision tree for how to choose the proper HTTP response code for (almost) any given situation.
api  http  rest  reference 
january 2016
The Complete Guide to Securing Amazon Web Services
Welcome to the complete guide to securing Amazon Web Services. As I was researching how to secure my AWS resources, I realized there isn’t a one-stop guide for securing every piece of AWS. I’ve compiled from around the web (including great resources from Amazon,, and others) to build this guide.

This guide will be updated as new services arise, configuration changes occur, or other things happen that require an update to the guide.
aws  security  tutorial 
january 2016
Very simple 'git push' workflow to deploy code on your own server
This technique isn't new. In fact, it's far from it. Around 2013, everyone seemed to be using this (or some variant of it) to deploy simple projects. But since then, it seems to have quiet down a bit. That's a shame, because it's super easy to use.
git  deployment  software 
january 2016
Smash TV on Vimeo
Modern electronic mixes set to visuals made from found video of the 80s and 90s
video  mix  music 
november 2015
PostgreSQL on the Command Line
I’ve been using PostgreSQL on a daily basis for the last four years. While I initially resorted to GUI applications to interact with databases, I now exclusively use the built-in command line tools, allowing me to work more efficiently while sticking to my preferred tools.
postgres  database  tutorial 
november 2015
Postgres Guide
We here are very big fans of Postgres as a database and believe it is often the best database for the job. For many though, working with and maintaining Postgres involves a steep learning curve. This guide is designed as an aid for beginners and experienced users to find specific tips and explore tools available within Postgres.
database  guide  sql 
october 2015
Charging By the Project or the Hour
What are you worth? How much do you charge for the wonderful work that you do? How do you communicate your value to your clients? Do you quote an hourly rate, and then present a tally of hours and expenses at the end of a project? That's typical of many IPs, who find this the simplest way to charge their clients. Or do you quote an up-front, flat rate for a project? This eliminates the sphincter-tightening moment at the end of the job when you present your bill. You run the risk, however, of seriously undercharging if the project turns out to be more complicated than you thought it would be.
freelance  advice 
october 2015
Tips for Scaling Web Apps
This blog post is a short list of things you can do, on basically any web project, to improve performance, scalability, and cost.
advice  web  performance 
october 2015
The anatomy of a Go project
There are a lot of resources about getting started in Go and places where a beginner can play around and become comfortable with the language. This tutorial is about taking the next steps: building robust projects that are fully documented, tested, and usable by the Go community.
tutorial  programming 
august 2015
How do roguelikes generate levels?
I think a large part of Brogue’s appeal lies in its level generation, which creates tight spaces full of interesting environmental detail, with traps to avoid, chasms to fall into, and a strange ASCII beauty. I spoke to the game’s creator, Brian Walker, about what his design goals for those levels are, how you balance a game you can’t predict, and the exact process by which the game creates those levels.
game  article  interview 
august 2015
JavaScript: The Right Way
This is a guide intended to introduce new developers to JavaScript and help experienced developers learn more about its best practices. Despite the name, this guide doesn't necessarily mean "the only way" to do JavaScript. We just gather all the articles, tips, and tricks from top developers and put it here. Since it comes from exceptional folks, we could say that it is "the right way", or the best way to do so.
javascript  reference  programming  js  tutorial 
july 2015
Sound Tests and Audio Test Tones
Our Sound Tests will help you to intuitively benchmark your audio Equipment and loudspeakers, your listening environment and room Acoustics or your Hearing without any other device required. In these tests, your ears will be your best judge.
may 2015
« earlier      
advice ajax algorithms animation anti-pattern apache apc api app application architecture art article aws backbone backup bah bars bash best_practices bitters blog book booze build bundle business cheat_sheet class clients cms cocktails code_review coderfaire coffee college command command_line compost continuous_integration cookbook courses cqrs cron css data data_structures database deployment design design_pattern desktop devops diagram dj django doctrine documentary documentation ebook editor email emergency essay events example exercise extension fashion feminism fitness flexbox font fonts framework free freelance gadget game game_programming gaming garden git github gmail go google guide headphones health helicopter hg homebrew hosting html html5 http icons ie interview investing irc java javascript jquery js json learning lecture less library life line linux liquor list logic mac magento make management markdown mathematics maven media_temple meetup mercurial microframework mit mix mongdb mongodb monitoring motivation music mysql networking nginx nosql oauth open open_source opinion optimization orm os os_x oss patterns pdf performance photography photoshop php physics plan plugin polyfill postgres presentation privilege process programming project puppet python quake3 queue rabbitmq recipes redis reference regex remote rest retro rfc ringtones ruby saas safari sass scala script search security seo server service shell silex simple software source spec sql sqlalchemy ssh startup stock story svg symfony symfony2 symfonylive talk testing textmate theme tips tool tumblr turorial tutorial twig twitter typography ui ui_element unix version_control video vim wallpaper watches web web_app web_design whiskey wii wireframe work x xss

Copy this bookmark: