P O R Q U E V I M ?
A U G U S T O PA S C U T T I
Sebastião Salgado
V O C Ê D E V E R I A U S A R
V I M ?
V O C Ê D E V E R I A U S A R
V I M ?
N Ã O
B O M S O F T WA R E
N O S S O O B J E T I V O É S E M P R E P R O D U Z I R :
Edward Weston
O Q U E É U M
B O M
S O F T WA R E ?
O Q U E FA Z U M S O F T WA R E R U I M ?
• Bugs
• Difícil de usar
• Código difícil:
• De entender
• De estender
• De mudar
C O M O C R I A R
B O M
S O F T WA R E ?
“ C O M O
C O Z I N H A R
B E M ? ”
“ C O M A
B O A
C O M I D A ”
L I N U X
E X I S T E M B O N S E X E M P L O S D E S O F T WA R E ?
Sebastião Salgado
– R O B P I K E
“The heart of Unix philosophy is the idea that the
power of a system comes more from the
relationships among programs than from the
programs themselves.”
I M P O N D O L I M I T E S
• Passar o máximo de tempo possível na shell.
• Evitar root. Customizar pouco.
• Otimizar sempre.
E X E M P L O S
A N A LY T I C S
#!/bin/bash
[~/Apache] $ cat /var/log/apache2/access.log
220.181.108.101 - - [20/Jun/2012:19:31:01 +0200] "GET / HTTP/1.1" 200 912 "-" "Mozilla/5.0 (compatible;
Baiduspider/2.0; +http://www.baidu.com/search/spider.html)"
123.125.68.79 - - [20/Jun/2012:19:53:24 +0200] "GET / HTTP/1.1" 200 625 "-" "Mozilla/5.0 (compatible;
Baiduspider/2.0; +http://www.baidu.com/search/spider.html)"
178.154.210.252 - - [20/Jun/2012:19:54:10 +0200] "GET /?C=S;O=A HTTP/1.1" 200 663 "-" "Mozilla/5.0
(compatible; YandexBot/3.0; +http://yandex.com/bots)"
74.125.126.102 - - [20/Jun/2012:20:15:28 +0200] "GET / HTTP/1.1" 200 606 "http://www.google.com/url?
sa=t&rct=j&q=error&source=web&cd=1&ved=0CFAQFjAG&url=http%3A%2F%2Fwww.isrolab.com
%2F&ei=GxPiT5PsL4e04AHPtgE&usg=AFQjCNHnmjmdkUV584ORIpOXz7zAPX0UHQ" "Mozilla/4.0 (compatible; MSIE 7.0; Windows
NT 5.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022; InfoPath.2; .NET
CLR 3.0.4506.2152; .NET CLR 3.5.30729)"
74.125.126.103 - - [20/Jun/2012:20:15:29 +0200] "GET /icons/blank.gif HTTP/1.1" 200 383 "http://
www.isrolab.com/" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR
2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022; InfoPath.2; .NET CLR 3.0.4506.2152; .NET CLR
3.5.30729)"
74.125.126.93 - - [20/Jun/2012:20:15:29 +0200] "GET /icons/folder.gif HTTP/1.1" 200 460 "http://
www.isrolab.com/" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR
2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022; InfoPath.2; .NET CLR 3.0.4506.2152; .NET CLR
3.5.30729)"
74.125.126.82 - - [20/Jun/2012:20:15:30 +0200] "GET /favicon.ico HTTP/1.1" 404 449 "-" "Mozilla/4.0
(compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR
3.5.21022; InfoPath.2; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)"
184.82.92.239 - - [20/Jun/2012:21:03:44 +0200] "GET /logs/access.log HTTP/1.1" 200 2519 "http://isrolab.com/"
"Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0; Mozilla/4.0 (compatible; MSIE 6.0; Windows NT
5.1; SV1) ; .NET CLR 3.5.30729)"
173.236.21.106 - - [20/Jun/2012:21:16:22 +0200] "GET /robots.txt HTTP/1.0" 404 488 "-" "Mozilla/5.0
(compatible; MJ12bot/v1.4.3; http://www.majestic12.co.uk/bot.php?+)"
173.236.21.106 - - [20/Jun/2012:21:16:23 +0200] "GET / HTTP/1.0" 200 621 "-" "Mozilla/5.0 (compatible;
MJ12bot/v1.4.3; http://www.majestic12.co.uk/bot.php?+)"
213.186.122.2 - - [20/Jun/2012:21:27:53 +0200] "GET /logs/?C=D;O=D HTTP/1.1" 200 658 "-" "Mozilla/5.0
(compatible; AhrefsBot/3.0; +http://ahrefs.com/robot/)"
66.249.72.65 - - [20/Jun/2012:21:28:00 +0200] "GET /robots.txt HTTP/1.1" 404 508 "-" "Mozilla/5.0 (compatible;
Googlebot/2.1; +http://www.google.com/bot.html)"
66.249.72.65 - - [20/Jun/2012:21:28:00 +0200] "GET /logs/ HTTP/1.1" 200 723 "-" "Mozilla/5.0 (compatible;
Googlebot/2.1; +http://www.google.com/bot.html)"
123.125.71.44 - - [20/Jun/2012:21:38:57 +0200] "GET / HTTP/1.1" 200 913 "-" "Mozilla/5.0 (compatible;
Baiduspider/2.0; +http://www.baidu.com/search/spider.html)"
220.181.108.88 - - [20/Jun/2012:21:39:48 +0200] "GET / HTTP/1.1" 200 913 "-" "Mozilla/5.0 (compatible;
Baiduspider/2.0; +http://www.baidu.com/search/spider.html)"
178.154.210.252 - - [20/Jun/2012:21:45:12 +0200] "GET /logs/ HTTP/1.1" 200 728 "-" "Mozilla/5.0 (compatible;
YandexBot/3.0; +http://yandex.com/bots)"
139.18.2.209 - - [20/Jun/2012:22:31:43 +0200] "GET / HTTP/1.1" 200 912 "-" "findlinks/2.6 (+http://
wortschatz.uni-leipzig.de/findlinks/)"
#!/bin/bash
[~/Apache] $ wc -l access.log
65063 access.log
#!/bin/bash
[~/Apache] $ grep "HTTP/1.1" access.log | wc -l
52129
#!/bin/bash
[~/Apache] $ tail -n 1 access.log
192.210.213.91 - - [08/Jun/2014:19:42:34 -0700] "GET /logs/
access.log HTTP/1.1" 200 4663 "http://redlug.com/"
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_4)
AppleWebKit/536.30.1 (KHTML, like Gecko) Version/6.0.5
Safari/536.30.1" "redlug.com"
#!/bin/bash
[~/Apache]$ head -n 1 access.log
1.202.218.8 - - [20/Jun/2012:19:05:12 +0200] "GET /
robots.txt HTTP/1.0" 404 492 "-" ""Mozilla/5.0"
#!/bin/bash
[~/Apache]$ head -n 1 access.log
1.202.218.8 - - [20/Jun/2012:19:05:12 +0200] "GET /
robots.txt HTTP/1.0" 404 492 "-" “"Mozilla/5.0"
#!/bin/bash
[~/Apache]$ head -n 1 access.log
1.202.218.8 - - [20/Jun/2012:19:05:12 +0200] "GET /
robots.txt HTTP/1.0" 404 492 "-" “"Mozilla/5.0"
[~/Apache]$ head -n 1 access.log | awk '{print $1}'
1.202.218.8
#!/bin/bash
[~/Apache]$ head -n 1 access.log
1.202.218.8 - - [20/Jun/2012:19:05:12 +0200] "GET /
robots.txt HTTP/1.0" 404 492 "-" “"Mozilla/5.0"
[~/Apache]$ head -n 1 access.log | awk '{print $1}'
1.202.218.8
[~/Apache]$ awk '/access.log/' access.log | awk '{print
$1}'
31.184.238.164
31.184.238.164
77.27.18.67
31.184.238.164
31.184.238.164
31.184.238.164
31.184.238.164
31.184.238.164
#!/bin/bash
[~/Apache] $ awk '/access.log/' access.log | 
awk '{print $1}' | 
sort | 
uniq -c | 
sort -r
#!/bin/bash
[~/Apache] $ awk '/access.log/' access.log | 
awk '{print $1}' | 
sort | 
uniq -c | 
sort -r
41 31.184.238.164
2 192.210.213.91
1 77.27.18.67
1 192.227.243.66
1 189.120.185.4
B R O W S E R U S E D
IE
1%
Chrome
39%
Firefox
60%
G I T
G I T T O W E R
M E U R E P O S I T Ó R I O
B R A N C H E S
L O G
C O M M I T
H A H A H A
[~/symfony] $ git branch
* 2.7
[~/symfony] $ git branch
* 2.7
[~/symfony] $ git log | wc -l
299 348
[~/symfony] $ git branch
* 2.7
[~/symfony] $ git log | wc -l
299 348
[~/symfony] $ alias rank="sort | uniq -c | sort -nr | head -n 3“
[~/symfony] $ git branch
* 2.7
[~/symfony] $ git log | wc -l
299 348
[~/symfony] $ alias rank="sort | uniq -c | sort -nr | head -n 3“
[~/symfony] $ git branch
* 2.7
[~/symfony] $ git log | wc -l
299 348
[~/symfony] $ alias rank="sort | uniq -c | sort -nr | head -n 3“
[~/symfony] $ git branch
* 2.7
[~/symfony] $ git log | wc -l
299 348
[~/symfony] $ alias rank="sort | uniq -c | sort -nr | head -n 3“
[~/symfony] $ git branch
* 2.7
[~/symfony] $ git log | wc -l
299 348
[~/symfony] $ alias rank="sort | uniq -c | sort -nr | head -n 3“
[~/symfony] $ git branch
* 2.7
[~/symfony] $ git log | wc -l
299 348
[~/symfony] $ alias rank="sort | uniq -c | sort -nr | head -n 3“
[~/symfony] $ git log --format=%an | rank
10725 Fabien Potencier
1211 Bernhard Schussek
371 Tobias Schultze
[~/symfony] $ git config alias.author "log --format=%an"
[~/symfony] $ git config alias.author "log --format=%an"
[~/symfony] $ git author —since 2014-01-01 | rank
2444 Fabien Potencier
357 Nicolas Grekas
262 Bernhard Schussek
[~/symfony] $ cd ../zf2
[~/symfony] $ cd ../zf2
[~/zf2] $
[~/symfony] $ cd ../zf2
[~/zf2] $ git author | rank
7963 Matthew Weier O'Phinney
1647 Marco Pivetta
782 Maks3w
[~/zf2] $ git author --since 2014-01-01 | rank
1507 Marco Pivetta
1048 Matthew Weier O'Phinney
215 Abdul Malik Ikhsan
1 #!/usr/bin/env php
2 <?php
3 /**
4 * hdate (Human Date)
5 *
6 * Converts a human (relative) date to an specific date.
7 * Usage: hdate "+10 day"
11 */
12
13 $relativeDate = $argv[1];
14 $date = new DateTime($relativeDate);
15
16 echo $date->format('Y-m-d');
[~/zf2] $ git author --since `hdate -1year` | rank
1358 Marco Pivetta
564 Matthew Weier O'Phinney
132 Abdul Malik Ikhsan
E D I T O R
V O LTA N D O A O
T R A B A L H O
[~/zf2] $ git diff --name-only HEAD^
library/Zend/Db/Sql/AbstractSql.php
tests/ZendTest/Db/Sql/AbstractSqlTest.php
tests/ZendTest/Db/Sql/ExpressionTest.php
[~/zf2] $ git diff --name-only HEAD^
library/Zend/Db/Sql/AbstractSql.php
tests/ZendTest/Db/Sql/AbstractSqlTest.php
tests/ZendTest/Db/Sql/ExpressionTest.php
[~/zf2] $ vim `git diff --name-only HEAD^`
L I N T ?
< E S C > : ! P H P - L %
< E S C > : ! P H P - L %
N O R M A L M O D E
< E S C > : ! P H P - L %
C O M A N D O E X T E R N O
< E S C > : ! P H P - L %
O P Ç Ã O “ L I N T ” D O P H P
< E S C > : ! P H P - L %
C A M I N H O C O M P L E T O D O A R Q U I V O A T U A L
R O D A R U M T E S T E ?
C H E C A R E S T I L O ?
V E R Ú LT I M O S A U T O R E S ?
A D I C I O N A R N O G I T ?
T U D O I S S O C O M A L G U N S
P O U C O S P R I N C Í P I O S D E D E S I G N
P R I N C Í P I O S
• Tudo é um arquivo
• Tipo de Informação? Texto.
• Escopos diferentes? Quebra de linha.
• Cache? Nah.
• Erros? Yeah!
L I M I T E S S Ã O B O N S ?
C O N C L U S Ã O
Cartier Bresson
P E R G U N TA S ?
W Eugene Smith
H T T P : / / B I T. LY / G U G U - L I N D O
F O I B O M P R A V O C Ê ?

Porque VIM?

  • 1.
    P O RQ U E V I M ? A U G U S T O PA S C U T T I Sebastião Salgado
  • 2.
    V O CÊ D E V E R I A U S A R V I M ?
  • 3.
    V O CÊ D E V E R I A U S A R V I M ? N Ã O
  • 5.
    B O MS O F T WA R E N O S S O O B J E T I V O É S E M P R E P R O D U Z I R : Edward Weston
  • 6.
    O Q UE É U M B O M S O F T WA R E ?
  • 7.
    O Q UE FA Z U M S O F T WA R E R U I M ? • Bugs • Difícil de usar • Código difícil: • De entender • De estender • De mudar
  • 8.
    C O MO C R I A R B O M S O F T WA R E ?
  • 9.
    “ C OM O C O Z I N H A R B E M ? ”
  • 10.
    “ C OM A B O A C O M I D A ”
  • 11.
    L I NU X E X I S T E M B O N S E X E M P L O S D E S O F T WA R E ? Sebastião Salgado
  • 12.
    – R OB P I K E “The heart of Unix philosophy is the idea that the power of a system comes more from the relationships among programs than from the programs themselves.”
  • 13.
    I M PO N D O L I M I T E S • Passar o máximo de tempo possível na shell. • Evitar root. Customizar pouco. • Otimizar sempre.
  • 14.
    E X EM P L O S
  • 15.
    A N ALY T I C S
  • 16.
    #!/bin/bash [~/Apache] $ cat/var/log/apache2/access.log
  • 17.
    220.181.108.101 - -[20/Jun/2012:19:31:01 +0200] "GET / HTTP/1.1" 200 912 "-" "Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)" 123.125.68.79 - - [20/Jun/2012:19:53:24 +0200] "GET / HTTP/1.1" 200 625 "-" "Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)" 178.154.210.252 - - [20/Jun/2012:19:54:10 +0200] "GET /?C=S;O=A HTTP/1.1" 200 663 "-" "Mozilla/5.0 (compatible; YandexBot/3.0; +http://yandex.com/bots)" 74.125.126.102 - - [20/Jun/2012:20:15:28 +0200] "GET / HTTP/1.1" 200 606 "http://www.google.com/url? sa=t&rct=j&q=error&source=web&cd=1&ved=0CFAQFjAG&url=http%3A%2F%2Fwww.isrolab.com %2F&ei=GxPiT5PsL4e04AHPtgE&usg=AFQjCNHnmjmdkUV584ORIpOXz7zAPX0UHQ" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022; InfoPath.2; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)" 74.125.126.103 - - [20/Jun/2012:20:15:29 +0200] "GET /icons/blank.gif HTTP/1.1" 200 383 "http:// www.isrolab.com/" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022; InfoPath.2; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)" 74.125.126.93 - - [20/Jun/2012:20:15:29 +0200] "GET /icons/folder.gif HTTP/1.1" 200 460 "http:// www.isrolab.com/" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022; InfoPath.2; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)" 74.125.126.82 - - [20/Jun/2012:20:15:30 +0200] "GET /favicon.ico HTTP/1.1" 404 449 "-" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022; InfoPath.2; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)" 184.82.92.239 - - [20/Jun/2012:21:03:44 +0200] "GET /logs/access.log HTTP/1.1" 200 2519 "http://isrolab.com/" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0; Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1) ; .NET CLR 3.5.30729)" 173.236.21.106 - - [20/Jun/2012:21:16:22 +0200] "GET /robots.txt HTTP/1.0" 404 488 "-" "Mozilla/5.0 (compatible; MJ12bot/v1.4.3; http://www.majestic12.co.uk/bot.php?+)" 173.236.21.106 - - [20/Jun/2012:21:16:23 +0200] "GET / HTTP/1.0" 200 621 "-" "Mozilla/5.0 (compatible; MJ12bot/v1.4.3; http://www.majestic12.co.uk/bot.php?+)" 213.186.122.2 - - [20/Jun/2012:21:27:53 +0200] "GET /logs/?C=D;O=D HTTP/1.1" 200 658 "-" "Mozilla/5.0 (compatible; AhrefsBot/3.0; +http://ahrefs.com/robot/)" 66.249.72.65 - - [20/Jun/2012:21:28:00 +0200] "GET /robots.txt HTTP/1.1" 404 508 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" 66.249.72.65 - - [20/Jun/2012:21:28:00 +0200] "GET /logs/ HTTP/1.1" 200 723 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" 123.125.71.44 - - [20/Jun/2012:21:38:57 +0200] "GET / HTTP/1.1" 200 913 "-" "Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)" 220.181.108.88 - - [20/Jun/2012:21:39:48 +0200] "GET / HTTP/1.1" 200 913 "-" "Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)" 178.154.210.252 - - [20/Jun/2012:21:45:12 +0200] "GET /logs/ HTTP/1.1" 200 728 "-" "Mozilla/5.0 (compatible; YandexBot/3.0; +http://yandex.com/bots)" 139.18.2.209 - - [20/Jun/2012:22:31:43 +0200] "GET / HTTP/1.1" 200 912 "-" "findlinks/2.6 (+http:// wortschatz.uni-leipzig.de/findlinks/)"
  • 18.
    #!/bin/bash [~/Apache] $ wc-l access.log 65063 access.log
  • 19.
    #!/bin/bash [~/Apache] $ grep"HTTP/1.1" access.log | wc -l 52129
  • 20.
    #!/bin/bash [~/Apache] $ tail-n 1 access.log 192.210.213.91 - - [08/Jun/2014:19:42:34 -0700] "GET /logs/ access.log HTTP/1.1" 200 4663 "http://redlug.com/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_4) AppleWebKit/536.30.1 (KHTML, like Gecko) Version/6.0.5 Safari/536.30.1" "redlug.com"
  • 21.
    #!/bin/bash [~/Apache]$ head -n1 access.log 1.202.218.8 - - [20/Jun/2012:19:05:12 +0200] "GET / robots.txt HTTP/1.0" 404 492 "-" ""Mozilla/5.0"
  • 22.
    #!/bin/bash [~/Apache]$ head -n1 access.log 1.202.218.8 - - [20/Jun/2012:19:05:12 +0200] "GET / robots.txt HTTP/1.0" 404 492 "-" “"Mozilla/5.0"
  • 23.
    #!/bin/bash [~/Apache]$ head -n1 access.log 1.202.218.8 - - [20/Jun/2012:19:05:12 +0200] "GET / robots.txt HTTP/1.0" 404 492 "-" “"Mozilla/5.0" [~/Apache]$ head -n 1 access.log | awk '{print $1}' 1.202.218.8
  • 24.
    #!/bin/bash [~/Apache]$ head -n1 access.log 1.202.218.8 - - [20/Jun/2012:19:05:12 +0200] "GET / robots.txt HTTP/1.0" 404 492 "-" “"Mozilla/5.0" [~/Apache]$ head -n 1 access.log | awk '{print $1}' 1.202.218.8 [~/Apache]$ awk '/access.log/' access.log | awk '{print $1}' 31.184.238.164 31.184.238.164 77.27.18.67 31.184.238.164 31.184.238.164 31.184.238.164 31.184.238.164 31.184.238.164
  • 25.
    #!/bin/bash [~/Apache] $ awk'/access.log/' access.log | awk '{print $1}' | sort | uniq -c | sort -r
  • 26.
    #!/bin/bash [~/Apache] $ awk'/access.log/' access.log | awk '{print $1}' | sort | uniq -c | sort -r 41 31.184.238.164 2 192.210.213.91 1 77.27.18.67 1 192.227.243.66 1 189.120.185.4
  • 27.
    B R OW S E R U S E D IE 1% Chrome 39% Firefox 60%
  • 28.
  • 29.
    G I TT O W E R
  • 30.
    M E UR E P O S I T Ó R I O
  • 31.
    B R AN C H E S
  • 32.
  • 33.
    C O MM I T
  • 34.
    H A HA H A
  • 35.
    [~/symfony] $ gitbranch * 2.7
  • 36.
    [~/symfony] $ gitbranch * 2.7 [~/symfony] $ git log | wc -l 299 348
  • 37.
    [~/symfony] $ gitbranch * 2.7 [~/symfony] $ git log | wc -l 299 348 [~/symfony] $ alias rank="sort | uniq -c | sort -nr | head -n 3“
  • 38.
    [~/symfony] $ gitbranch * 2.7 [~/symfony] $ git log | wc -l 299 348 [~/symfony] $ alias rank="sort | uniq -c | sort -nr | head -n 3“
  • 39.
    [~/symfony] $ gitbranch * 2.7 [~/symfony] $ git log | wc -l 299 348 [~/symfony] $ alias rank="sort | uniq -c | sort -nr | head -n 3“
  • 40.
    [~/symfony] $ gitbranch * 2.7 [~/symfony] $ git log | wc -l 299 348 [~/symfony] $ alias rank="sort | uniq -c | sort -nr | head -n 3“
  • 41.
    [~/symfony] $ gitbranch * 2.7 [~/symfony] $ git log | wc -l 299 348 [~/symfony] $ alias rank="sort | uniq -c | sort -nr | head -n 3“
  • 42.
    [~/symfony] $ gitbranch * 2.7 [~/symfony] $ git log | wc -l 299 348 [~/symfony] $ alias rank="sort | uniq -c | sort -nr | head -n 3“ [~/symfony] $ git log --format=%an | rank 10725 Fabien Potencier 1211 Bernhard Schussek 371 Tobias Schultze
  • 43.
    [~/symfony] $ gitconfig alias.author "log --format=%an"
  • 44.
    [~/symfony] $ gitconfig alias.author "log --format=%an" [~/symfony] $ git author —since 2014-01-01 | rank 2444 Fabien Potencier 357 Nicolas Grekas 262 Bernhard Schussek
  • 47.
  • 48.
    [~/symfony] $ cd../zf2 [~/zf2] $
  • 49.
    [~/symfony] $ cd../zf2 [~/zf2] $ git author | rank 7963 Matthew Weier O'Phinney 1647 Marco Pivetta 782 Maks3w
  • 51.
    [~/zf2] $ gitauthor --since 2014-01-01 | rank 1507 Marco Pivetta 1048 Matthew Weier O'Phinney 215 Abdul Malik Ikhsan
  • 52.
    1 #!/usr/bin/env php 2<?php 3 /** 4 * hdate (Human Date) 5 * 6 * Converts a human (relative) date to an specific date. 7 * Usage: hdate "+10 day" 11 */ 12 13 $relativeDate = $argv[1]; 14 $date = new DateTime($relativeDate); 15 16 echo $date->format('Y-m-d');
  • 53.
    [~/zf2] $ gitauthor --since `hdate -1year` | rank 1358 Marco Pivetta 564 Matthew Weier O'Phinney 132 Abdul Malik Ikhsan
  • 54.
    E D IT O R
  • 55.
    V O LTAN D O A O T R A B A L H O
  • 56.
    [~/zf2] $ gitdiff --name-only HEAD^ library/Zend/Db/Sql/AbstractSql.php tests/ZendTest/Db/Sql/AbstractSqlTest.php tests/ZendTest/Db/Sql/ExpressionTest.php
  • 57.
    [~/zf2] $ gitdiff --name-only HEAD^ library/Zend/Db/Sql/AbstractSql.php tests/ZendTest/Db/Sql/AbstractSqlTest.php tests/ZendTest/Db/Sql/ExpressionTest.php [~/zf2] $ vim `git diff --name-only HEAD^`
  • 58.
    L I NT ?
  • 59.
    < E SC > : ! P H P - L %
  • 60.
    < E SC > : ! P H P - L % N O R M A L M O D E
  • 61.
    < E SC > : ! P H P - L % C O M A N D O E X T E R N O
  • 62.
    < E SC > : ! P H P - L % O P Ç Ã O “ L I N T ” D O P H P
  • 63.
    < E SC > : ! P H P - L % C A M I N H O C O M P L E T O D O A R Q U I V O A T U A L
  • 64.
    R O DA R U M T E S T E ?
  • 65.
    C H EC A R E S T I L O ?
  • 66.
    V E RÚ LT I M O S A U T O R E S ?
  • 67.
    A D IC I O N A R N O G I T ?
  • 68.
    T U DO I S S O C O M A L G U N S P O U C O S P R I N C Í P I O S D E D E S I G N
  • 69.
    P R IN C Í P I O S • Tudo é um arquivo • Tipo de Informação? Texto. • Escopos diferentes? Quebra de linha. • Cache? Nah. • Erros? Yeah!
  • 70.
    L I MI T E S S Ã O B O N S ? C O N C L U S Ã O Cartier Bresson
  • 71.
    P E RG U N TA S ? W Eugene Smith
  • 72.
    H T TP : / / B I T. LY / G U G U - L I N D O F O I B O M P R A V O C Ê ?