What happens when you type google.com into your browser’s address box and press enter?

What happens when you type google.com into your browser’s address box and press enter?

This repository is an attempt to answer the age old interview question “What happens when you type google.com into your browser’s address box and press enter?”

Except instead of the usual story, we’re going to try to answer this question in as much detail as possible. No skipping out on anything.

This is a collaborative process, so dig in and try to help out! There’s tons of details missing, just waiting for you to add them! So send us a pull request, please!

This is all licensed under the terms of the Creative Commons Zero license.

The “g” key is pressed
The “enter” key bottoms out
Interrupt fires [NOT for USB keyboards]
(On Windows) A WM_KEYDOWN message is sent to the app
(On OS X) A KeyDown NSEvent is sent to the app
(On GNU/Linux) the Xorg server listens for keycodes
Parse URL
Is it a URL or a search term?
Check HSTS list
Convert non-ASCII Unicode characters in hostname
DNS lookup
ARP process
Opening of a socket
TLS handshake
HTTP protocol
HTTP Server Request Handle
Behind the scenes of the Browser
Browser
HTML parsing
CSS interpretation
Page Rendering
GPU Rendering
Window Server
Post-rendering and user-induced execution

Advertisements

suckless.org: Dedicated to software that sucks less

suckless.org: Dedicated to software that sucks less
Our philosophy is about keeping things simple, minimal and usable. We believe this should become the mainstream philosophy in the IT sector. Unfortunately, the tendency for complex, error-prone and slow software seems to be prevalent in the present-day software industry. libc implementations musl – standard C library that attempts to be even smaller than uClibc uClibc – strives to be a minimalist C library suitable for embedded computing See also: embedded libc comparison Compression liblzf – very fast, legally unencumbered compression library (dual licensed: 2-clause BSD or GPL License) xz embedded – lightweight decompressor for the xz LZMA compressor (public domain) zlib – the “standard” compression/decompression library, quite small, used in many applications (zlib license) miniz – single C-file reimplementation of zlib, public domain. Cryptography polarssl – lightweight SSL/TLS implementation (GPL with exceptions)

joelonsoftware.com: The Duct Tape Programmer – Joel on Software

joelonsoftware.com: The Duct Tape Programmer – Joel on Software
he’s just going back into his office to write more of his clever classes constructed entirely from multiple inheritance from templates, without a single implementation body at all, and it’s going to crash like crazy and you’re going to get paged at night to come in and try to figure it out because he’ll be at some goddamn “Design Patterns” meetup. So they sheepishly go along with whatever faddish programming craziness has come down from the architecture astronauts who speak at conferences and write books and articles and are so much smarter than us that they don’t realize that the stuff that they’re promoting is too hard for us.

Incentive Pay Considered Harmful – Joel on Software

Incentive Pay Considered Harmful – Joel on Software
And herein lies the rub. Most people think that they do pretty good work (even if they don’t). It’s just a little trick our minds play on us to keep life bearable. So if everybody thinks they do good work, and the reviews are merely correct (which is not very easy to achieve), then most people will be disappointed by their reviews. The cost of this in morale is hard to understate. On teams where performance reviews are done honestly, they tend to result in a week or so of depressed morale, moping, and some resignations. They tend to drive wedges between team members, often because the poorly-rated are jealous of the highly-rated, in a process that DeMarco and Lister call teamicide: the inadvertent destruction of jelled teams.

Lockless Inc. Low level software to optimize performance

Lockless Inc. Low level software to optimize performance
The Lockless Memory Allocator is downloadable under the GPL 3.0 License. You can thus use the allocator in other open-source programs. However, if you wish to use it in closed-source proprietory software, Contact us about other options. Lockless MPI Released Version 1.2 of the Lockless MPI has just been released. It is optimized for modern 64bit multicore systems, and supports programs running on Linux. There are bindings for C, C++ and FORTRAN. It supports version 1.3 of the MPI spec, with a few small parts of version 2.0

Joel on Software: Things You Should Never Do, Part I

Joel on Software: Things You Should Never Do, Part I
We’re programmers. Programmers are, in their hearts, architects, and the first thing they want to do when they get to a site is to bulldoze the place flat and build something grand. We’re not excited by incremental renovation: tinkering, improving, planting flower beds. There’s a subtle reason that programmers always want to throw away the code and start over. The reason is that they think the old code is a mess. And here is the interesting observation: they are probably wrong. The reason that they think the old code is a mess is because of a cardinal, fundamental law of programming: It’s harder to read code than to write it. This is why code reuse is so hard. This is why everybody on your team has a different function they like to use for splitting strings into arrays of strings. They write their own function because it’s easier and more fun than figuring out how the old function works.