markdown 每个程序员都应该知道的延迟数

每个程序员都应该知道的延迟数

latency_numbers.md
| Task                               |          ns |      us |  ms |                               |
|:-----------------------------------|------------:|--------:|----:|------------------------------:|
| L1 cache reference                 |         0.5 |         |     |                               |
| Branch mispredict                  |           5 |         |     |                               |
| L2 cache reference                 |           7 |         |     |  14x L1 cache                 |
| Mutex lock/unlock                  |          25 |         |     |                               |
| Main memory reference              |         100 |         |     |  20x L2 cache, 200x L1 cache  |
| Compress 1K bytes with Zippy       |       3,000 |       3 |     |                               |
| Send 1K bytes over 1 Gbps network  |      10,000 |      10 |     |                               |
| Read 4K randomly from SSD*         |     150,000 |     150 |     | ~1GB/sec SSD                  |
| Read 1 MB sequentially from memory |     250,000 |     250 |     |                               |
| Round trip within same datacenter  |     500,000 |     500 |     |                               |
| Read 1 MB sequentially from SSD*   |   1,000,000 |   1,000 |   1 | ~1GB/sec SSD, 4X memory       |
| Disk seek                          |  10,000,000 |  10,000 |  10 | 20x datacenter roundtrip      |
| Read 1 MB sequentially from disk   |  20,000,000 |  20,000 |  20 | 80x memory, 20X SSD           |
| Send packet<br>CA->Netherlands->CA | 150,000,000 | 150,000 | 150 |                               |

* 1 = 10^-9 seconds
* 1 = 10^-6 seconds = 1,000 ns
* 1 ms = 10^-3 seconds = 1,000 = 1,000,000 ns

markdown 测试

测试

test
asdfasdf

```php
function hello() {
  
  sdafsf
}
```

markdown (Codelink.pro)教程快速参考[https://codelink.pro/blog/run-wordpress-locally-using-the-inbuilt-php-server/]

(Codelink.pro)教程快速参考[https://codelink.pro/blog/run-wordpress-locally-using-the-inbuilt-php-server/]

Run WordPress locally using the inbuilt PHP server.md
## Quick reference for tutorial at https://codelink.pro/blog/run-wordpress-locally-using-the-inbuilt-php-server

Get WP

    wget wordpress.org/latest.zip && unzip latest.zip && cd wordpress

Create Database
  
    mysqladmin -u root -p create databasename

Start server    

    php -S localhost:8000

markdown CSS按钮

CSS按钮

style.css
body {
  background-color: #231f20;
  font-family: "Quicksand", sans-serif;
  text-align: center;
}

h1 {
  color: #fff;
  font-size: 3rem;
  font-family: "Righteous", cursive;
  letter-spacing: 2px;
}

.container {
  width: 100%;
}

.button {
  width: 150px;
  height: 50px;
  cursor: pointer;
  float: left;
  margin: 15px;
}

/* ===== HOVER GRADIENT BUTTONS ===== */
.button1,
.button2,
.button1-2,
.button2-2 {
  border-radius: 15px;
  font-size: 1.125rem;
  font-weight: 700;
  padding-top: 10px;
  color: #fff;
}
.button1 {
  background: linear-gradient(-45deg, #00275e, #6d98ab, #00275e);
  box-shadow: 15px 15px 0px #feb729;
  transition: all 0.3s ease;
  background-size: 400% 400%;
}

.button1:hover {
  box-shadow: 5px 5px 0px #feb729;
  transition: all 0.3s ease;
  animation: gradient 10s ease infinite;
}

.button2 {
  background: linear-gradient(-45deg, #006295, #9be1fb, #006295);
  box-shadow: 5px 5px 0px #bd2031;
  transition: all 0.3s ease;
  background-size: 400% 400%;
}

.button2:hover {
  box-shadow: 15px 15px 0px #bd2031;
  transition: all 0.3s ease;
  animation: gradient 10s ease infinite;
}

.button1-2 {
  background: linear-gradient(-45deg, #ffd5b5, #fab279, #cc223b);
  box-shadow: -15px -15px 0px #7a091a;
  transition: all 0.3s ease;
  background-size: 400% 400%;
}
.button1-2:hover {
  box-shadow: -5px -5px 0px #7a091a;
  transition: all 0.3s ease;
  animation: gradient 10s ease infinite;
}

.button2-2 {
  background: linear-gradient(-45deg, #ffed00, #bfba3d, #7ebc57);
  box-shadow: 5px 5px 0px #2eac66;
  transition: all 0.3s ease;
  background-size: 400% 400%;
}

.button2-2:hover {
  box-shadow: 15px 15px 0px #2eac66;
  transition: all 0.3s ease;
  animation: gradient 10s ease infinite;
}

@keyframes gradient {
  50% {
    background-position: 100% 0;
  }
}

/* ===== PUSH AND PULL ===== */
.button3,
.button4,
.button3-2,
.button4-2 {
  border-radius: 15px;
  color: #fff;
  font-size: 1.2rem;
  font-weight: 700;
  padding-top: 5px;
  text-transform: uppercase;
  border: 5px solid #fff;
}
.button3 {
  box-shadow: -15px 20px 0px #fff;
  transition: all 0.3s ease;
  transform: translate3d(0.6em, -0.6em, 0);
  transition: all 0.3s cubic-bezier(0.175, 0.885, 0.32, 1.275);
  transition-delay: 220ms;
}

.button3:active {
  box-shadow: 0px 0px 0px #fff;
  transform: translate3d(0, 0, 0);
  transition: all 0.3s cubic-bezier(0.23, 1, 0.32, 1);
}

.button4 {
  box-shadow: 0px 0px 0px #fff;
  transition: all 0.3s ease;
  transform: translate3d(0, 0, 0);
  transition: all 0.2s cubic-bezier(0.23, 1, 0.32, 1);
}

.button4:active {
  box-shadow: -15px 20px 0px #fff;
  transform: translate3d(0.6em, -0.6em, 0);
  transition: all 240ms cubic-bezier(0.175, 0.885, 0.32, 1.275);
  transition-delay: 0.22s;
}

.button3-2 {
  box-shadow: -15px 20px 0px #fff;
  transition: all 0.3s ease;
  transform: translate3d(0.6em, -0.6em, 0);
  transition: all 0.3s cubic-bezier(0.175, 0.885, 0.32, 1.275);
  transition-delay: 0.22s;
}

.button3-2:active {
  box-shadow: 0px 0px 5px #fff;
  transform: translate3d(0, 0, 0);
  transition: all 0.3s cubic-bezier(0.23, 1, 0.32, 1);
  border-color: transparent;
}

.button4-2 {
  box-shadow: 0px 0px 5px #fff;
  transition: all 0.3s ease;
  transform: translate3d(0, 0, 0);
  transition: all 0.5s cubic-bezier(0.23, 1, 0.32, 1);
  border-color: transparent;
}

.button4-2:active {
  box-shadow: -15px 20px 0px #fff;
  transform: translate3d(0.6em, -0.6em, 0);
  transition: all 0.5s cubic-bezier(0.175, 0.885, 0.32, 1.275);
  transition-delay: 220ms;
  border-color: #fff;
}

/* ===== DIRECTIONAL COLOR IN ===== */
.button5,
.button6,
.button7,
.button8 {
  padding-top: 3px;
  height: 30px;
}

.button5 {
  color: #f3eedb;
  border: solid #f3eedb 1px;
  background: linear-gradient(270deg, #f3eedb, #c9c4b1, #231f20, #231f20);
  background-color: #231f20;
  background-position: 1% 50%;
  background-size: 300% 300%;
  transition: all 0.7s ease-out;
}

.button5:hover {
  color: #231f20;
  background-position: 99% 50%;
}

.button6 {
  color: #231f20;
  border: solid #f3eedb 1px;
  background: linear-gradient(270deg, #f3eedb, #c9c4b1, #231f20, #231f20);
  background-color: #231f20;
  background-position: 99% 50%;
  background-size: 300% 300%;
  transition: all 0.7s ease-out;
}

.button6:hover {
  color: #f3eedb;
  background-position: 1% 50%;
}

.button7 {
  color: #f3eedb;
  border: solid #f3eedb 1px;
  background: linear-gradient(0deg, #f3eedb, #c9c4b1, #231f20, #231f20);
  background-color: #231f20;
  background-position: 1% 1%;
  background-size: 300% 300%;
  transition: all 0.7s ease-out;
}

.button7:hover {
  color: #231f20;
  background-position: 99% 99%;
}

.button8 {
  color: #f3eedb;
  border: solid #f3eedb 1px;
  background: linear-gradient(0deg, #f3eedb, #c9c4b1, #231f20, #231f20);
  background-size: 300% 300%;
  transition: all 0.7s ease-out;
  color: #231f20;
  background-position: 99% 99%;
}

.button8:hover {
  color: #f3eedb;
  background-position: 1% 1%;
}

/* ===== CALL TO ACTION BUTTONS ===== */
.button9,
.button10,
.button9-2,
.button10-2 {
  padding-top: 10px;
  height: 30px;
  border-radius: 5px;
  color: #fff;
  font-weight: 700;
  position: relative;
}

.button9 {
  background-color: #377420;
  box-shadow: 0px 3px 0px #214413;
  animation: wiggle infinite 5s;
}
.button9:active {
  top: 1px;
}

@keyframes wiggle {
  0% {
    transform: rotate(0deg);
  }
  3% {
    transform: rotate(-1deg);
  }
  4% {
    transform: rotate(1deg);
  }
  5% {
    transform: rotate(0deg);
  }
  100% {
    transform: rotate(0deg);
  }
}

.button10 {
  background-color: #742020;
  box-shadow: 0px 3px 0px #4f1616;
  animation: pulse infinite 5s;
}
.button10:active {
  position: relative;
  top: 1px;
}
@keyframes pulse {
  0% {
    transform: scale(1);
  }
  3% {
    transform: scale(1.05);
  }
  4% {
    transform: scale(1);
  }
  5% {
    transform: scale(1.05);
  }
  6% {
    transform: scale(1);
  }
  100% {
    transform: scale(1);
  }
}

.button9-2 {
  border-radius: 5px;
  font-weight: 400;
  color: #00c7ec;
  background-color: #012839;
  height: 35px;
  border: 1px solid #00c7ec;
  transition: all 0.2s ease-out;
  position: relative;
  animation: glow 2s ease-in infinite;
}

.button9-2:hover {
  background-color: #00c7ec;
  color: #fff;
  border-color: #00c7ec;
  transition: all 0.2s ease-in;
}
.button9-2:active {
  top: 1px;
}

@keyframes glow {
  0% {
    box-shadow: 0 0 0 0 transparent;
  }

  50% {
    box-shadow: 0 0 30px 0 rgba(0, 199, 236, 0.5);
  }
  100% {
    box-shadow: 0 0 0 0 transparent;
  }
}

.button10-2 {
  font-weight: 400;
  color: #fff;
  background-color: transparent;
  height: 40px;
  border: 2px solid #fff;
  border-radius: 2px;
  font-weight: 700;
}

.button10-2:before {
  content: "";
  display: block;
  position: absolute;
  box-sizing: border-box;
  width: 175px;
  left: -12px;
  top: -10px;
  height: 70px;
  border: 2px solid #fff;
  border-radius: 2px;
  opacity: 0;
  animation: show 5s infinite;
}

.button10-2:hover {
  border: 2px solid transparent;
}
.button10-2:active {
  top: 1px;
}

@keyframes show {
  0% {
    opacity: 0;
  }
  50% {
    opacity: 1;
  }
  60% {
    opacity: 0;
  }
  100% {
    opacity: 0;
  }
}

/* ===== PUSH BUTTONS ===== */
.button11,
.button12 {
  height: 30px;
  width: 70px;
  border-radius: 5px;
  color: #fff;

  border: 1px solid;
  border-color: #4a2f8c #482e89 #3c2672;
}

.button11 {
  padding-top: 3px;
  box-shadow: 0px 0px 1px 1px rgba(66, 169, 51, 1);
  border: none;
  background: linear-gradient(to bottom, #31741b 0%, #3fa131 60%, #42a933 100%);
}
.button11:active {
  background: linear-gradient(to bottom, #42a933 0%, #3fa131 50%, #31741b 100%);
}
.button12 {
  padding-top: 0px;
  border: 2px solid #7753c5;
  box-shadow: inset 0px 0px 1px 1px rgba(130, 94, 201, 1);
  background: linear-gradient(
    to bottom,
    #825ec9 0%,
    #7d53c5 50%,
    #6440be 50%,
    #482da8 100%
  );
}
.button12:active {
  background: linear-gradient(
    to bottom,
    #482da8 0%,
    #6440be 50%,
    #7d53c5 50%,
    #825ec9 100%
  );
}

/* ===== ROTATING BUTTONS ===== */

.button13,
.button14,
.button13-2,
.button14-2 {
  border-radius: 50%;
  width: 80px;
  height: 80px;
  color: #fff;
  transition: all 0.2s ease;
  border: 2px solid transparent;
}

.button13 {
  background-color: #c0392b;
  font-size: 2.5rem;
}

.button13:hover {
  border: 2px solid #c0392b;
  color: #c0392b;
}

.button14 {
  background-color: #e67e22;
  font-size: 2.2rem;
}

.button14:hover {
  border: 2px solid #e67e22;
  color: #e67e22;
}

.button13-2 {
  background-color: #2bbf86;
  font-size: 2.2rem;
}

.button13-2:hover {
  border: 2px solid #2bbf86;
  color: #2bbf86;
}

.button14-2 {
  background-color: #842bbf;
  font-size: 2.2rem;
}

.button14-2:hover {
  border: 2px solid #842bbf;
  color: #842bbf;
}

.button13 i,
.button14 i,
.button13-2 i,
.button14-2 i {
  margin: 20px;
}
.button13:hover,
.button14:hover,
.button13-2:hover,
.button14-2:hover {
  background-color: #fff;
  transform: rotate(50deg) scale(1.1);
  box-shadow: 5px 5px 5px 0px rgba(0, 0, 0, 0.5);
}

.button13:active,
.button14:active,
.button13-2:active,
.button14-2:active {
  position: relative;
  top: 1px;
  box-shadow: 0px 0px 0px 0px rgba(0, 0, 0, 0);
  transition: all 0.1s ease-in;
}

/* ===== HOVER ARROW BUTTONS ===== */

.button15,
.button16,
.button17,
.button18 {
  width: 150px;
  height: 25px;
  color: #fff;
  padding: 15px 0;
  font-size: 1.2rem;
  border-radius: 5px;
}

.button15 {
  background-color: #2c3e50;
}

.button15 span {
  transition: 0.3s;
}

.button15 span::after {
  content: "\00bb";
  opacity: 0;
  transition: 0.3s;
}

.button15:hover span {
  padding-right: 10px;
}
.button15:hover span:after {
  opacity: 1;
}

.button16 {
  background-color: #7f8c8d;
  font-weight: 700;
}

.button16 i {
  opacity: 0;
  font-size: 1rem;
  padding-left: 2px;
}

.button16:hover i {
  opacity: 1;
  transition: 0.3s;
  position: relative;
  top: 1px;
  animation: point 2s infinite ease;
}

@keyframes point {
  0% {
    left: 0;
  }
  5% {
    left: 5px;
  }
  10% {
    left: 0;
  }
  15% {
    left: 5px;
  }
  20% {
    left: 0;
  }
  100% {
    left: 0;
  }
}

.button17 {
  border: 1px solid #fff;
  color: #000;
  background-color: #fff;
  font-weight: 700;
  text-transform: uppercase;
  position: relative;
  overflow: hidden;
}

.button17 span {
  display: block;
}

.button17::before {
  content: "";
  display: block;
  width: 0;
  height: 0;
  border-top: 30px solid transparent;
  border-bottom: 30px solid transparent;
  border-right: 30px solid #2b95bf;
  position: absolute;
  bottom: -32%;
  left: -1px;
  transform: rotate(-45deg) translateX(-50px);
  transition: transform 0.2s ease;
}

.button17::after {
  content: "";
  display: block;
  width: 0;
  height: 0;
  border-top: 30px solid transparent;
  border-bottom: 30px solid transparent;
  border-right: 30px solid #2b95bf;
  position: absolute;
  top: -32%;
  right: -2px;
  transform: rotate(135deg) translateX(-50px);
  transition: transform 0.2s ease;
}

.button17:hover::before {
  transform: rotate(-45deg) translateX(0);
}

.button17:hover::after {
  transform: rotate(135deg) translateX(0);
}

.button17:active {
  top: 1px;
}

.button18 {
  color: #c1ff9b;
  border: 1px solid #c1ff9b;
}
index.html
<h1>Button Styles</h1>
<div class="row">
  <div class="container ">
    <div class="button button1">Hover Me</div>
    <div class="button button2">Hover Me</div>
    <div class="button button1-2">Hover Me</div>
    <div class="button button2-2">Hover Me</div>
  </div>

  <div class="container">
    <div class="button button3">Push Me</div>
    <div class="button button4">Pull Me</div>
    <div class="button button3-2">Push Me</div>
    <div class="button button4-2">Pull Me</div>
  </div>

  <div class="container">
    <div class="button button5">Left</div>
    <div class="button button6">Right</div>
    <div class="button button7">Up</div>
    <div class="button button8">Down</div>
  </div>

  <div class="container">
    <div class="button button9">Call To Action</div>
    <div class="button button10">Call To Action</div>
    <div class="button button9-2">Call To Action</div>
    <div class="button button10-2">Call To Action</div>
  </div>

  <div class="container">
    <div class="button button11">Push</div>
    <div class="button button12">Push</div>
  </div>

  <div class="container">
    <div class="button button13"><i class="fa fa-cog" aria-hidden="true"></i></div>
    <div class="button button14"><i class="fa fa-hashtag" aria-hidden="true"></i></div>
    <div class="button button13-2"><i class="fa fa-tag" aria-hidden="true"></i></div>
    <div class="button button14-2"><i class="fa fa-star-o" aria-hidden="true"></i></div>
  </div>

  <div class="container">
    <div class="button button15"><span>Hover </span></div>
    <div class="button button16">Hover <i class="fa  fa-chevron-right" aria-hidden="true"></i></div>
    <div class="button button17"><span>Hover </span></div>
    <div class="button button18"><span>Hover</span</div>
                </div>
        </div> <!-- row -->
css-buttons.markdown
CSS Buttons
-----------
Just a whole bunch of random button styles I have seen around the web re-created in a Pen.

A [Pen](https://codepen.io/harunpehlivan/pen/gepMoZ) by [HARUN PEHLİVAN](https://codepen.io/harunpehlivan) on [CodePen](https://codepen.io).

[License](https://codepen.io/harunpehlivan/pen/gepMoZ/license).

markdown mikrotik-updown-test.md

mikrotik-updown-test.md
# script examples

https://mikrotik.com/testdocs/ros/2.8/appex/scripting1.php
https://www.mikrotik-routeros.com/2010/12/simple-routeros-http-loadbandwidth-tester/


# btest /tools /bandwith-server

TBD

https://forum.mikrotik.com/viewtopic.php?f=2&t=104266&p=645201#p645201


# ping

    /ping size=1400 address=root.cz

# test upload/download

    [admin@mt-test] /tool> fetch address=192.168.88.2 src-path=conf.rsc \
    user=admin mode=ftp password=123 dst-path=123.rsc upload=yes

    Another file download example that demonstrates the usage of url property.

    [admin@test_host] /> /tool fetch url="http://www.mikrotik.com/img/netaddresses2.pdf" mode=http 
      status: finished

    [admin@test_host] /> /file print 
     # NAME                     TYPE                  SIZE                 CREATION-TIME       
     ...
     5 netaddresses2.pdf        .pdf file             11547                jun/01/2010 11:59:51

    Sending information to a remote host
    It is possible to use HTTP POST request to send information to a remote server, that is prepared to accept it. In the following example, we send geographic coordinates to a PHP page:

    /tool fetch http-method=post http-content-type="application/json" http-data="{\"lat\":\"56.12\",\"lon\":\"25.12\"}" url="http://testserver.lv/index.php"              


## notify on issue

    :local sysname [/system identity get name]
    :local CurDate [/system clock get date] 
    :local CurTime [/system clock get time] 
    :local Interface "Interface_Name"
    :local LinkName "Link_Description"
    :local ifspeed "GET_DESIRED_INTERFACE_SPEED"

    #Email
    /tool e-mail send to="YourEmail@email.com" subject="$StatusTraffic speed is more then $DSpeed at $CurTime $CurDate" body="Device : $sysname 
    Date : $CurDate 
    Time : $CurTime 
    
    
   
## conditions

    /interface ethernet monitor ether2 once do={
     :if ($"status" != "link-ok") do={ :log info "ether2 is WITHOUT LINK"};
     :if ($"auto-negotiation" != "done") do={ :log info "ether2 auto-negotiation NOT WORKING"};
     :if ($"rate" != "100Mbps") do={ :log info "ether2 is NOT 100Mbps"};
     :if ($"full-duplex" = "no") do={ :log info "ether2 is NOT Full-Duplex"};
    }

markdown 将结构从https转换为http.md

convert fabric from https to http.md
the default transformation method in nodejs sdk of fabric is http while https is adapted in golang sdk.To enable both sdk to 
join the fabric network,we need to modify some configuration in golang example

```
git clone https://github.com/hyperledger/fabric-sdk-go
```
replace all grpcs to grpc in config_test.yaml
replace all https to http in config_test.yaml
comment out all line related to tls in docker-compose.yaml

```
make test
```

then we go to https://github.com/hyperledger/fabric-samples/fabcar
without use basic-network,we run
```
node enroll.js
node registerUser.js
```

markdown 原子编辑器备忘单(蜜饯)

原子编辑器备忘单(蜜饯)

Atom Editor Cheat Sheet Sweetmeat.md


Use these rapid keyboard shortcuts to control the [GitHub Atom text editor](http://atom.io) on Mac OSX.
<!--More-->
# Key to the Keys
- ⌘ : Command key
- ⌃ : Control key
- ⌫ : Delete key
- ← : Left arrow key
- → : Right arrow key
- ↑ : Up arrow key
- ↓ : Down arrow key
- ⌥ : Option or Alt key
- ↩ : Return or Enter key
- ⇧ : Shift key

# Contents
- [The Command Palette](#atom_cmd_palette)
- [Configuration](#atom_config)
- [Application Tasks](#atom_app_tasks)
- [Autocomplete](#atom_autocomplete)
- [Bookmarks](#atom_bookmarks)
- [Brackets](#atom_brackets)
- [Code Folding](#atom_code_fold)
- [Code Navigation &amp; Management](#atom_code_nav)
- [Character Transformations](#atom_char_transform)
- [Comments](#atom_comments)
- [Editor View Tasks](#atom_editor_view)
- [File Tasks](#atom_file)
- [Find &amp; Replace](#atom_find_replace)
- [Font Tasks](#atom_font)
- [Grammar](#atom_grammar)
- [Search Tasks](#atom_search)

<h2 id="atom_cmd_palette"> The Command Palette</h2>

| <span style="font-size:22px;">Task</span> | <span style="font-size:22px;"><i class="icon-apple" align="center"></i> Keystrokes</span> | 
| --------| --------- |
| **Open Command Palette** | ⌘-⇧-p |


<h2 id="atom_config">Configuration</h2>

| <span style="font-size:22px;">Task</span> | <span style="font-size:22px;"><i class="icon-apple" align="center"></i> Keystrokes</span> | 
| --------| --------- |
| **Open Command Palette** | ⌘-, |

<h2 id="atom_app_tasks">Application Tasks</h2>

| <span style="font-size:22px;">Task</span> | <span style="font-size:22px;"><i class="icon-apple" align="center"></i> Keystrokes</span> | 
| --------| --------- |
| **Hide Application** | ⌘-h |
| **Hide Other Applications** | ⌥-⌘-h |
| **Minimize Application** | ⌘-m |
| **New File** | ⌘-n |
| **New Window** | ⌘-⇧-n |
| **Open Application** | ⌘-o |
| **Open Dev** | ⇧-⌘-o |
| **Quit** | ⌘-q |

<h2 id="atom_autocomplete">Autocomplete</h2>

| <span style="font-size:22px;">Task</span> | <span style="font-size:22px;"><i class="icon-apple" align="center"></i> Keystrokes</span> | 
| --------| --------- |
| **Toggle Autocomplete** | ⌃-<code>space</code> |

<h2 id="atom_bookmarks">Bookmarks</h2>

| <span style="font-size:22px;">Task</span> | <span style="font-size:22px;"><i class="icon-apple" align="center"></i> Keystrokes</span> | 
| --------| --------- |
| **Toggle Bookmark** | ⌘-<code>F2</code> |
| **View All Bookmarks** | ⌃-<code>F2</code> |
| **Jump to Next Bookmark** | <code>F2</code> |
| **Jump to Previous Bookmark** | ⇧-<code>F2</code>|
| **Clear All Bookmarks** | ⌘-⇧-<code>F2</code> |

<h2 id="atom_brackets">Brackets</h2>

| <span style="font-size:22px;">Task</span> | <span style="font-size:22px;"><i class="icon-apple" align="center"></i> Keystrokes</span> | 
| --------| --------- |
| **Find Matching Bracket** | ⌃-m |

<h2 id="atom_code_fold">Code Folding</h2>

| <span style="font-size:22px;">Task</span> | <span style="font-size:22px;"><i class="icon-apple" align="center"></i> Keystrokes</span> | 
| --------| --------- |
| **Fold Code** | ⌥-⌘-[ |
| **Unfold Code** | ⌥-⌘-] |
| **Fold at Indentation Level (N)** | ⌘-k cmd-<code>N</code> |
| **Fold Selected Text** | ⌥-⌘-⌃-f |
| **Unfold All Code** | ⌥-⌘-} |

<h2 id="atom_code_nav">Code Navigation &amp; Management</h2>

| <span style="font-size:22px;">Task</span> | <span style="font-size:22px;"><i class="icon-apple" align="center"></i> Keystrokes</span> | 
| --------| --------- |
| **Cut to End of Line** | ⌃-k |
| **Delete to Beginning of Word** | ⌥-⌫ |
| **Delete to End of Word** | ⌥-d |
| **Delete Line** | ⌃-⇧-k |
| **Duplicate Line** | ⌘-⇧-d |
| **Go to Line** | ⌃-g |
| **Go to Matching Bracket** | ⌃-m |
| **Indent Selected Text** | ⌘-] |
| **Outdent Selected Text** | ⌘-[ |
| **Join Lines** | ⌘-j |
| **Move to Beginning of Word** | ⌥-b |
| **Move to End of Word** | ⌥-f |
| **Move to Beginning of Line** | ⌃-a |
| **Move to End of Line** | ⌃-e |
| **Move Line Up** | ⌘-⌃-↑ |
| **Move Line Down** | ⌘-⌃-↓ |
| **Move to Top of File** | ⌘-↑ |
| **Move to Bottom of File** | ⌘-↓ |
| **Move to First Character of Line** |  ⌘-← |
| **Move to Last Character of Line** | ⌘-→|
| **Select Left Character** | ⌘-⌃-b |
| **Select Right Character** | ⌘-⌃-f | 
| **Select to Beginning of Word** | ⌥-⇧-b |
| **Select to End of Word** | ⌥-⇧-f |
| **Select Entire Word** | ⌃-⇧-w |
| **Select to First Character of Line** | ⌥-⇧-a |
| **Select to Last Character of Line** | ⌥-⇧-e |
| **Select to Same Position, Next Line** | ⌥-⇧-n |
| **Select to Same Position, Previous Line** | ⌥-⇧-p |
| **Select to Top of File** | ⌘-⇧-↑ |
| **Select to Bottom of File** | ⌘-⇧-↓ |
| **Select All** | ⌘-a |
| **Select Next** | ⌘-d |
| **Select Line** | ⌘-L |
| **Toggle Line Comments** | ⌘-/ |

<h2 id="atom_char_transform">Character Transformations</h2>

| <span style="font-size:22px;">Task</span> | <span style="font-size:22px;"><i class="icon-apple" align="center"></i> Keystrokes</span> | 
| --------| --------- |
| **Convert Tabs to Spaces** | ⌥-⌘-[ | 
| **Convert Spaces to Tabs** | ⌥-⌘-] |
| **Convert to Upper Case** | ⌘-k-u |
| **Convert to Lower Case** | ⌘-k-L |

<h2 id="atom_comments">Comments</h2>

| <span style="font-size:22px;">Task</span> | <span style="font-size:22px;"><i class="icon-apple" align="center"></i> Keystrokes</span> | 
| --------| --------- |
| **Toggle Comment** | ⌘-/ |

<h2 id="atom_editor_view">Editor View Tasks</h2>

| <span style="font-size:22px;">Task</span> | <span style="font-size:22px;"><i class="icon-apple" align="center"></i> Keystrokes</span> | 
| --------| --------- |
| **Split Panes Vertically** | ⌘-k-↓ |
| **Split Panes Horizontally** | ⌘-k-→ | 
| **Vertical Navigation Panes** | ⌘-k ⌘-↓ |
| **Horizontal Navigation Panes** | ⌘-k ⌘-→ |
| **Toggle Full Screen** | ⌃-⌘-f |
| **Toggle Tree View** | ⌘-\ |

<h2 id="atom_file">File Tasks</h2>

| <span style="font-size:22px;">Task</span> | <span style="font-size:22px;"><i class="icon-apple" align="center"></i> Keystrokes</span> | 
| --------| --------- |
| **Fuzzy Find Files** | ⌘-t |
| **Find Open File** | ⌘-b |
| **Find Modified, Untracked (git) File** | ⌘-⇧-b |
| **Open Tree View** | ⌃-0 | 
| **Toggle Tree View** | ⌘-\ |
| **Add a File** | a |
| **Move a File** | m |
| **Delete a File** | ⌫ |
| **Reopen Last File** | ⌘-⇧-t |

<h2 id="atom_find_replace">Find &amp; Replace</h2>

| <span style="font-size:22px;">Task</span> | <span style="font-size:22px;"><i class="icon-apple" align="center"></i> Keystrokes</span> | 
| --------| --------- |
| **Find String in Current File** | ⌘-f |
| **Find String in All Project Files** | ⇧-⌘-f |
| **Find Next Matching String** | ⌘-g |
| **Find Previous Matching String** | ⇧-⌘-g |
| **Select Next Matching String** | ⌘-d |
| **Select All Matching Strings** | ⌃-⌘-g |
| **Replace String in Current File** | ⌥-⌘-f |

<h2 id="atom_font">Font Tasks</h2>

| <span style="font-size:22px;">Task</span> | <span style="font-size:22px;"><i class="icon-apple" align="center"></i> Keystrokes</span> | 
| --------| --------- |
| **Increase Font Size** | cmd-+ |
| **Decrease Font Size** | cmd-- |

<h2 id="atom_grammar">Grammar</h2>

| <span style="font-size:22px;">Task</span> | <span style="font-size:22px;"><i class="icon-apple" align="center"></i> Keystrokes</span> | 
| --------| --------- |
| **Select Grammar** | ⌃-⇧-L |

<h2 id="atom_search">Search Tasks</h2>

| <span style="font-size:22px;">Task</span> | <span style="font-size:22px;"><i class="icon-apple" align="center"></i> Keystrokes</span> | 
| --------| --------- |
| **Search for Symbol** | ⌘-r |
| **Search for Symbol Across Project** | ⌘-⇧-r |


markdown keybase.md

keybase.md
### Keybase proof

I hereby claim:

  * I am yourwebdevguy on github.
  * I am yourwebdevguy (https://keybase.io/yourwebdevguy) on keybase.
  * I have a public key ASCglWFPJu8bZpViFShWBxugmtmm0jWwRH8LwWcOkkUaego

To claim this, I am signing this object:

```json
{
  "body": {
    "key": {
      "eldest_kid": "0120312d0aa08753dd948fa49aaba7b9bd3aa418c71eb6d0fc6ee8292deca4536ede0a",
      "host": "keybase.io",
      "kid": "0120a095614f26ef1b669562152856071ba09ad9a6d235b0447f0bc1670e92451a7a0a",
      "uid": "3eb9e98dc30990fe1acb89429ea0eb19",
      "username": "yourwebdevguy"
    },
    "merkle_root": {
      "ctime": 1520724486,
      "hash": "f8d4632700a66c8b4e18dc5c53e5db7d15aa3a2c3231864041d9fc033b3f120e524a99c56e0efebc680df6f92de0b61eb2f5f7e0cb4f37be7fc9867a78b6e673",
      "hash_meta": "57abc9456094df3ceaf58b7dd786069402aec684614e4c1dfd9d21e1f20eebcd",
      "seqno": 2217222
    },
    "service": {
      "name": "github",
      "username": "yourwebdevguy"
    },
    "type": "web_service_binding",
    "version": 1
  },
  "client": {
    "name": "keybase.io go client",
    "version": "1.0.45"
  },
  "ctime": 1520724501,
  "expire_in": 504576000,
  "prev": "834f3ae8f60ea21a11d4bee57d6d1a1903bfe73ba2deedd483df51c98c4979ba",
  "seqno": 26,
  "tag": "signature"
}
```

with the key [ASCglWFPJu8bZpViFShWBxugmtmm0jWwRH8LwWcOkkUaego](https://keybase.io/yourwebdevguy), yielding the signature:

```
hKRib2R5hqhkZXRhY2hlZMOpaGFzaF90eXBlCqNrZXnEIwEgoJVhTybvG2aVYhUoVgcboJrZptI1sER/C8FnDpJFGnoKp3BheWxvYWTFA0d7ImJvZHkiOnsia2V5Ijp7ImVsZGVzdF9raWQiOiIwMTIwMzEyZDBhYTA4NzUzZGQ5NDhmYTQ5YWFiYTdiOWJkM2FhNDE4YzcxZWI2ZDBmYzZlZTgyOTJkZWNhNDUzNmVkZTBhIiwiaG9zdCI6ImtleWJhc2UuaW8iLCJraWQiOiIwMTIwYTA5NTYxNGYyNmVmMWI2Njk1NjIxNTI4NTYwNzFiYTA5YWQ5YTZkMjM1YjA0NDdmMGJjMTY3MGU5MjQ1MWE3YTBhIiwidWlkIjoiM2ViOWU5OGRjMzA5OTBmZTFhY2I4OTQyOWVhMGViMTkiLCJ1c2VybmFtZSI6InlvdXJ3ZWJkZXZndXkifSwibWVya2xlX3Jvb3QiOnsiY3RpbWUiOjE1MjA3MjQ0ODYsImhhc2giOiJmOGQ0NjMyNzAwYTY2YzhiNGUxOGRjNWM1M2U1ZGI3ZDE1YWEzYTJjMzIzMTg2NDA0MWQ5ZmMwMzNiM2YxMjBlNTI0YTk5YzU2ZTBlZmViYzY4MGRmNmY5MmRlMGI2MWViMmY1ZjdlMGNiNGYzN2JlN2ZjOTg2N2E3OGI2ZTY3MyIsImhhc2hfbWV0YSI6IjU3YWJjOTQ1NjA5NGRmM2NlYWY1OGI3ZGQ3ODYwNjk0MDJhZWM2ODQ2MTRlNGMxZGZkOWQyMWUxZjIwZWViY2QiLCJzZXFubyI6MjIxNzIyMn0sInNlcnZpY2UiOnsibmFtZSI6ImdpdGh1YiIsInVzZXJuYW1lIjoieW91cndlYmRldmd1eSJ9LCJ0eXBlIjoid2ViX3NlcnZpY2VfYmluZGluZyIsInZlcnNpb24iOjF9LCJjbGllbnQiOnsibmFtZSI6ImtleWJhc2UuaW8gZ28gY2xpZW50IiwidmVyc2lvbiI6IjEuMC40NSJ9LCJjdGltZSI6MTUyMDcyNDUwMSwiZXhwaXJlX2luIjo1MDQ1NzYwMDAsInByZXYiOiI4MzRmM2FlOGY2MGVhMjFhMTFkNGJlZTU3ZDZkMWExOTAzYmZlNzNiYTJkZWVkZDQ4M2RmNTFjOThjNDk3OWJhIiwic2Vxbm8iOjI2LCJ0YWciOiJzaWduYXR1cmUifaNzaWfEQD7S//pwASMPwjOYIAwKEd+DqXB3G87wFPk4XlVvV3i9kw4TeRPk8JHCenz8CRGSSXx/0qYpoxTHAje3xMvAWA+oc2lnX3R5cGUgpGhhc2iCpHR5cGUIpXZhbHVlxCBzUFqItkWIalzXP/5vNWZ7oAy62vcNvoUw2veGkemGbqN0YWfNAgKndmVyc2lvbgE=

```

And finally, I am proving ownership of the github account by posting this as a gist.

### My publicly-auditable identity:

https://keybase.io/yourwebdevguy

### From the command line:

Consider the [keybase command line program](https://keybase.io/download).

```bash
# look me up
keybase id yourwebdevguy
```

markdown 如何居中图像(Bootstrap 3,4或纯HTML / CSS)

如何居中图像(Bootstrap 3,4或纯HTML / CSS)

style.css
/* Wrap the image in a div and use text-align center */
.text-align-center {
  text-align: center;
}
 
/* Or, apply this CSS directly to the image to center it */
.centered-image {
  display: block;
  margin-left: auto;
  margin-right: auto;
}






/******* Ignore the CSS Below :) *******/
/* Basic Styling for this page below
   nothing to do with image centering */
/**************************************/
body {
  background-color: #333;
  color: #eee;
  font-family: verdana;
  font-size: 16px;
  max-width: 1024px;
  margin: 0 auto;
  min-width: 450px;
}

main {
  background-color: #222;  
  padding: 1em 4em;
}

.section {
  border-bottom: 1px solid #333;
  margin-bottom: 2em;
  padding-bottom: 2em;
  text-align: center;  
}

.section p,
.section h2,
.section h1,
.section ul {
  text-align: left;
}

h2 {
  color: #F9D423;  
}

pre {
  background-color: #eee;
  color: #222;
  display: inline-block;
  padding: 1em;
  text-align: left;
}

img {
  max-width: 100%;
}

@media (max-width: 625px) {
  body {
    font-size: .7rem;
  }
}

@media (max-width: 515px) {
  body {
    font-size: .6rem;
  }
}
script.babel
// Ignore this code - it has nothing to do with centering images :)
// It displays HTML code on the page.

document.getElementById('bs3-code-text-center').innerHTML = 
  escape(`<div class="text-center">
  <img src="https://source.unsplash.com/iYQC9xWMvw4/1024x768">
</div>`).replace(/%(..)/g,"&#x$1;");

document.getElementById('bs3-code-center-block').innerHTML = 
  escape(
    `<img class="img-responsive center-block" 
  src="https://source.unsplash.com/iYQC9xWMvw4/1024x768">`
).replace(/%(..)/g,"&#x$1;");

document.getElementById('bs4-code-text-center').innerHTML = 
  escape(`<div class="text-center">
  <img src="https://source.unsplash.com/iYQC9xWMvw4/1024x768">
</div>`).replace(/%(..)/g,"&#x$1;");

document.getElementById('bs4-code-center-block').innerHTML = 
  escape(
    `<img class="mx-auto d-block" 
  src="https://source.unsplash.com/iYQC9xWMvw4/1024x768">`
).replace(/%(..)/g,"&#x$1;");
index.html
<main>
  <div class="section">
    <h1>How To Center An Image with HTML/CSS, Bootstrap 3, and Boostrap 4</h1>
  </div>
  <div class="section">
    <h2>How To Center An Image Using Bootstrap 3</h2>
    <p>Wrap the image in a &lt;div&gt; and use the <code>text-center</code> class:
    <pre id="bs3-code-text-center"></pre>
    <p>Alternatively, if your image uses the <code>img-responsive</code> class, you can use <code>center-block</code>. No &lt;div&gt; needed! :)
    <pre id="bs3-code-center-block"></pre>
  </div>
  <div class="section">
    <h2>How To Center An Image Using Bootstrap 4</h2>
    <p>Wrap the image in a &lt;div&gt; and use the <code>text-center</code> class. This is exactly the same as above with Bootstrap 3:
    <pre id="bs4-code-text-center"></pre>
    <p>Or, you can apply the <code>mx-auto</code> and <code>d-block</code> classes directly to the image. No &lt;div&gt; needed! :)
    <pre id="bs4-code-center-block"></pre>
  </div>
  <div class="section">
    <h2>How To Center An Image With CSS - no Bootstrap required</h2>
    <p>(See the commented HTML and CSS in this codepen for code details.)</p>
    <p>Wrap the image in a &lt;div&gt; and assign a class with <code>text-align: center;</code> in your CSS.</p>
    
<!-- 
///////////////  SAMPLE CODE BELOW! /////////////////

  Wrap the Image in a div and assign a class to the div that uses text-align: center; 
  Here, we use a class named 'text-align-center' which you can find in the CSS panel
  of this codepen.
-->    

    <div class="text-align-center">
      <img src="https://source.unsplash.com/iYQC9xWMvw4/320x240" alt="kitten">
    </div>

<!-- -- -- -- -- -- -- -- -- -->    
    
    <p>Or, assign a class to your image with <code>display: block;</code> and <code>margin-left: auto; margin-right: auto;</code> in your CSS.</p>

    
<!-- 
  Another way is to use a class on the image itself. Here we made a class called
  'centered-image' and you can see how it is styled in the CSS panel of this codepen.
-->

    <img class="centered-image" src="https://source.unsplash.com/iYQC9xWMvw4/320x240" alt="kitten">

    
    
<!--

  //////////////// END OF SAMPLE CODE /////////////////

-- -- -- -- -- -- -- -- -->        
    

  </div>
  <div class="section">
    <h3>Have fun centering your images!!</h3>
    <ul>
      <li><strong>Latest Bootstrap 3: </strong><a href="https://www.bootstrapcdn.com" target="_blank">https://www.bootstrapcdn.com/</a></li>
      <li><strong>Latest Bootstrap 4: </strong><a href="https://v4-alpha.getbootstrap.com/getting-started/download/#bootstrap-cdn" target="_blank">https://v4-alpha.getbootstrap.com/getting-started/download/#bootstrap-cdn</a>
    </ul>
  </div>
</main>
how-to-center-an-image-bootstrap-3-4-or-plain-html-css.markdown
How to Center An Image (Bootstrap 3, 4, or plain HTML/CSS)
----------------------------------------------------------


A [Pen](https://codepen.io/harunpehlivan/pen/dmPBKK) by [HARUN PEHLİVAN](https://codepen.io/harunpehlivan) on [CodePen](https://codepen.io).

[License](https://codepen.io/harunpehlivan/pen/dmPBKK/license).

markdown 用Python开发的“最佳实践最佳”(BOBP)指南。

用Python开发的“最佳实践最佳”(BOBP)指南。

bobp-python.md
# The Best of the Best Practices (BOBP) Guide for Python

A "Best of the Best Practices" (BOBP) guide to developing in Python.

## In General

### Values

- "Build tools for others that you want to be built for you." - Kenneth Reitz
- "Simplicity is alway better than functionality." - Pieter Hintjens
- "Fit the 90% use-case. Ignore the nay sayers." - Kenneth Reitz
- "Beautiful is better than ugly." - [PEP 20][]
- Build for open source (even for closed source projects).

### General Development Guidelines

- "Explicit is better than implicit" - [PEP 20][]
- "Readability counts." - [PEP 20][]
- "Anybody can fix anything." - [Khan Academy Development Docs][]
- Fix each [broken window](http://www.artima.com/intv/fixit2.html) (bad design, wrong decision, or poor code) *as soon as it is discovered*.
- "Now is better than never." - [PEP 20][]
- Test ruthlessly. Write docs for new features.
- Even more important that Test-Driven Development--*Human-Driven Development*
- These guidelines may--and probably will--change.

## In Particular

### Style

Follow [PEP 8][], when sensible.

#### Naming

- Variables, functions, methods, packages, modules
    - `lower_case_with_underscores`
- Classes and Exceptions
    - `CapWords`
- Protected methods and internal functions
    - `_single_leading_underscore(self, ...)`
- Private methods
    - `__double_leading_underscore(self, ...)`
- Constants
    - `ALL_CAPS_WITH_UNDERSCORES`

###### General Naming Guidelines 

Avoid one-letter variables (esp. `l`, `O`, `I`). 

*Exception*: In very short blocks, when the meaning is clearly visible from the immediate context

**Fine**
```python
for e in elements:
    e.mutate()
```

Avoid redundant labeling.

**Yes**
```python
import audio

core = audio.Core()
controller = audio.Controller()
```

**No**
```python
import audio

core = audio.AudioCore()
controller = audio.AudioController()
```

Prefer "reverse notation".

**Yes**
```python
elements = ...
elements_active = ...
elements_defunct = ...
```

**No**
```python
elements = ...
active_elements = ...
defunct_elements ...
```

Avoid getter and setter methods.

**Yes**
```python
person.age = 42
```

**No**
```python
person.set_age(42)
```

#### Indentation

Use 4 spaces--never tabs. Enough said.

#### Imports

Import entire modules instead of individual symbols within a module. For example, for a top-level module `canteen` that has a file `canteen/sessions.py`,

**Yes**

```python
import canteen
import canteen.sessions
from canteen import sessions
```

**No**

```python
from canteen import get_user  # Symbol from canteen/__init__.py
from canteen.sessions import get_session  # Symbol from canteen/sessions.py
```

*Exception*: For third-party code where documentation explicitly says to import individual symbols.

*Rationale*: Avoids circular imports. See [here](https://sites.google.com/a/khanacademy.org/forge/for-developers/styleguide/python#TOC-Imports).

Put all imports at the top of the page with three sections, each separated by a blank line, in this order:

1. System imports
2. Third-party imports
3. Local source tree imports

*Rationale*: Makes it clear where each module is coming from.

#### Documentation

Follow [PEP 257][]'s docstring guidelines. [reStructured Text](http://docutils.sourceforge.net/docs/user/rst/quickref.html) and [Sphinx](http://sphinx-doc.org/) can help to enforce these standards.

Use one-line docstrings for obvious functions.

```python
"""Return the pathname of ``foo``."""
```

Multiline docstrings should include

- Summary line
- Use case, if appropriate
- Args
- Return type and semantics, unless ``None`` is returned

```python
"""Train a model to classify Foos and Bars.

Usage::

    >>> import klassify
    >>> data = [("green", "foo"), ("orange", "bar")]
    >>> classifier = klassify.train(data)

:param train_data: A list of tuples of the form ``(color, label)``.
:rtype: A :class:`Classifier <Classifier>`
"""
```

Notes

- Use action words ("Return") rather than descriptions ("Returns").
- Document `__init__` methods in the docstring for the class.

```python
class Person(object):
    """A simple representation of a human being.

    :param name: A string, the person's name.
    :param age: An int, the person's age.
    """
    def __init__(self, name, age):
        self.name = name
        self.age = age
```

##### On comments

Use them sparingly. Prefer code readability to writing a lot of comments. Often, small methods are more effective than comments.

*No*

```python
# If the sign is a stop sign
if sign.color == 'red' and sign.sides == 8:
    stop()
```

*Yes*

```python
def is_stop_sign(sign):
    return sign.color == 'red' and sign.sides == 8

if is_stop_sign(sign):
    stop()
```

When you do write comments, remember: "Strunk and White apply." - [PEP 8][]

#### Line lengths

Don't stress over it. 80-100 characters is fine.

Use parentheses for line continuations.

```python
wiki = (
    "The Colt Python is a .357 Magnum caliber revolver formerly manufactured "
    "by Colt's Manufacturing Company of Hartford, Connecticut. It is sometimes "
    'referred to as a "Combat Magnum". It was first introduced in 1955, the '
    "same year as Smith & Wesson's M29 .44 Magnum."
)
```

### Testing

Strive for 100% code coverage, but don't get obsess over the coverage score.

#### General testing guidelines

- Use long, descriptive names. This often obviates the need for doctrings in test methods.
- Tests should be isolated. Don't interact with a real database or network. Use a separate test database that gets torn down or use mock objects.
- Prefer [factories](https://github.com/rbarrois/factory_boy) to fixtures.
- Never let incomplete tests pass, else you run the risk of forgetting about them. Instead, add a placeholder like `assert False, "TODO: finish me"`.

#### Unit Tests

- Focus on one tiny bit of functionality.
- Should be fast, but a slow test is better than no test.
- It often makes sense to have one testcase class for a single class or model.

```python
import unittest
import factories

class PersonTest(unittest.TestCase):
    def setUp(self):
        self.person = factories.PersonFactory()

    def test_has_age_in_dog_years(self):
        self.assertEqual(self.person.dog_years, self.person.age / 7)
```

#### Functional Tests

Functional tests are higher level tests that are closer to how an end-user would interact with your application. They are typically used for web and GUI applications.

- Write tests as scenarios. Testcase and test method names should read like a scenario description.
- Use comments to write out stories, *before writing the test code*.

```python
import unittest

class TestAUser(unittest.TestCase):

    def test_can_write_a_blog_post(self):
        # Goes to the her dashboard
        ...
        # Clicks "New Post"
        ...
        # Fills out the post form
        ...
        # Clicks "Submit"
        ...
        # Can see the new post
        ...
```

Notice how the testcase and test method read together like "Test A User can write a blog post".


## Inspired by...

- [PEP 20 (The Zen of Python)][PEP 20]
- [PEP 8 (Style Guide for Python)][PEP 8]
- [The Hitchiker's Guide to Python][python-guide]
- [Khan Academy Development Docs][]
- [Python Best Practice Patterns][]
- [Pythonic Sensibilities][]
- [The Pragmatic Programmer][]
- and many other bits and bytes

[Pythonic Sensibilities]: http://www.nilunder.com/blog/2013/08/03/pythonic-sensibilities/
[Python Best Practice Patterns]: http://youtu.be/GZNUfkVIHAY
[python-guide]: http://docs.python-guide.org/en/latest/
[PEP 20]: http://www.python.org/dev/peps/pep-0020/
[PEP 257]: http://www.python.org/dev/peps/pep-0257/
[PEP 8]: http://www.python.org/dev/peps/pep-0008/
[Khan Academy Development Docs]: https://sites.google.com/a/khanacademy.org/forge/for-developers
[The Pragmatic Programmer]: http://www.amazon.com/The-Pragmatic-Programmer-Journeyman-Master/dp/020161622X/ref=sr_1_1?ie=UTF8&qid=1381886835&sr=8-1&keywords=pragmatic+programmer