Wednesday, January 28, 2015

Latency Numbers Every Programmer Should Know

I am not sure if 1% of programmers know it, but it is a great reference, kudos to Jeff Dean and Peter Norvig: Latency Comparison Numbers
L1 cache reference                            0.5 ns
Branch mispredict                             5   ns
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
Send 1K bytes over 1 Gbps network        10,000   ns    0.01 ms
Read 4K randomly from SSD*              150,000   ns    0.15 ms
Read 1 MB sequentially from memory      250,000   ns    0.25 ms
Round trip within same datacenter       500,000   ns    0.5  ms
Read 1 MB sequentially from SSD*      1,000,000   ns    1    ms  4X memory
Disk seek                            10,000,000   ns   10    ms  20x datacenter roundtrip
Read 1 MB sequentially from disk     20,000,000   ns   20    ms  80x memory, 20X SSD
Send packet CA->Netherlands->CA     150,000,000   ns  150    ms
1 ns = 10-9 seconds
1 ms = 10-3 seconds
* Assuming ~1GB/sec SSD

Saturday, January 24, 2015

Adding already existing project to GitHub using command line

A typical problem that I often have, playing with various repositories and frameworks is how to add already existing project to a remote repository. In this tutorial I show how to do it for a GitHub mostly by using a command line. I assume that git environment is already set up and that there is already a working environment that is able to push/pull data from GitHub. For windows the only thing that one has to do is to install GitHub for windows.
  • 1. Create a new repository in GitHub - it means go to GitHub page, login, add a new repository. This is the only step that requires doing something not in a command line. I will create a my-app repository, so it will be available under
  • 2. Open a git shell.
  • 3. Navigate to a project directory. Actually you have to 'cd my-app', and be in a directory with a project files.
  • 4. git init
  • 5. git add .
  • 6. git commit -m 'message'
  • 7. git remote add my-app
  • 8. git push -u my-app master