SlideShare a Scribd company logo
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 Ê ?

More Related Content

What's hot

The Full MySQL and MariaDB Parallel Replication Tutorial
The Full MySQL and MariaDB Parallel Replication TutorialThe Full MySQL and MariaDB Parallel Replication Tutorial
The Full MySQL and MariaDB Parallel Replication Tutorial
Jean-François Gagné
 
Making MySQL highly available using Oracle Grid Infrastructure
Making MySQL highly available using Oracle Grid InfrastructureMaking MySQL highly available using Oracle Grid Infrastructure
Making MySQL highly available using Oracle Grid Infrastructure
Ilmar Kerm
 
Vertical Slicing Architectures
Vertical Slicing ArchitecturesVertical Slicing Architectures
Vertical Slicing Architectures
Victor Rentea
 
MariaDB 10.11 key features overview for DBAs
MariaDB 10.11 key features overview for DBAsMariaDB 10.11 key features overview for DBAs
MariaDB 10.11 key features overview for DBAs
Federico Razzoli
 
ProxySQL & PXC(Query routing and Failover Test)
ProxySQL & PXC(Query routing and Failover Test)ProxySQL & PXC(Query routing and Failover Test)
ProxySQL & PXC(Query routing and Failover Test)
YoungHeon (Roy) Kim
 
MariaDB Server Performance Tuning & Optimization
MariaDB Server Performance Tuning & OptimizationMariaDB Server Performance Tuning & Optimization
MariaDB Server Performance Tuning & Optimization
MariaDB plc
 
Advance python
Advance pythonAdvance python
Advance python
pulkit agrawal
 
Redis cluster
Redis clusterRedis cluster
Redis cluster
iammutex
 
MySQL Replication Overview -- PHPTek 2016
MySQL Replication Overview -- PHPTek 2016MySQL Replication Overview -- PHPTek 2016
MySQL Replication Overview -- PHPTek 2016
Dave Stokes
 
Tools for Solving Performance Issues
Tools for Solving Performance IssuesTools for Solving Performance Issues
Tools for Solving Performance Issues
Odoo
 
[2018] MySQL 이중화 진화기
[2018] MySQL 이중화 진화기[2018] MySQL 이중화 진화기
[2018] MySQL 이중화 진화기
NHN FORWARD
 
Test NG Framework Complete Walk Through
Test NG Framework Complete Walk ThroughTest NG Framework Complete Walk Through
Test NG Framework Complete Walk Through
Narendran Solai Sridharan
 
Tips on how to improve the performance of your custom modules for high volume...
Tips on how to improve the performance of your custom modules for high volume...Tips on how to improve the performance of your custom modules for high volume...
Tips on how to improve the performance of your custom modules for high volume...Odoo
 
Troubleshooting PostgreSQL Streaming Replication
Troubleshooting PostgreSQL Streaming ReplicationTroubleshooting PostgreSQL Streaming Replication
Troubleshooting PostgreSQL Streaming Replication
Alexey Lesovsky
 
API Testing following the Test Pyramid
API Testing following the Test PyramidAPI Testing following the Test Pyramid
API Testing following the Test Pyramid
Elias Nogueira
 
MySQL Parallel Replication: inventory, use-case and limitations
MySQL Parallel Replication: inventory, use-case and limitationsMySQL Parallel Replication: inventory, use-case and limitations
MySQL Parallel Replication: inventory, use-case and limitations
Jean-François Gagné
 
Postgresql Database Administration- Day3
Postgresql Database Administration- Day3Postgresql Database Administration- Day3
Postgresql Database Administration- Day3
PoguttuezhiniVP
 
Django Web Application Security
Django Web Application SecurityDjango Web Application Security
Django Web Application Securitylevigross
 
[pgday.Seoul 2022] POSTGRES 테스트코드로 기여하기 - 이동욱
[pgday.Seoul 2022] POSTGRES 테스트코드로 기여하기 - 이동욱[pgday.Seoul 2022] POSTGRES 테스트코드로 기여하기 - 이동욱
[pgday.Seoul 2022] POSTGRES 테스트코드로 기여하기 - 이동욱
PgDay.Seoul
 
MySQL_SQL_Tunning_v0.1.3.docx
MySQL_SQL_Tunning_v0.1.3.docxMySQL_SQL_Tunning_v0.1.3.docx
MySQL_SQL_Tunning_v0.1.3.docx
NeoClova
 

What's hot (20)

The Full MySQL and MariaDB Parallel Replication Tutorial
The Full MySQL and MariaDB Parallel Replication TutorialThe Full MySQL and MariaDB Parallel Replication Tutorial
The Full MySQL and MariaDB Parallel Replication Tutorial
 
Making MySQL highly available using Oracle Grid Infrastructure
Making MySQL highly available using Oracle Grid InfrastructureMaking MySQL highly available using Oracle Grid Infrastructure
Making MySQL highly available using Oracle Grid Infrastructure
 
Vertical Slicing Architectures
Vertical Slicing ArchitecturesVertical Slicing Architectures
Vertical Slicing Architectures
 
MariaDB 10.11 key features overview for DBAs
MariaDB 10.11 key features overview for DBAsMariaDB 10.11 key features overview for DBAs
MariaDB 10.11 key features overview for DBAs
 
ProxySQL & PXC(Query routing and Failover Test)
ProxySQL & PXC(Query routing and Failover Test)ProxySQL & PXC(Query routing and Failover Test)
ProxySQL & PXC(Query routing and Failover Test)
 
MariaDB Server Performance Tuning & Optimization
MariaDB Server Performance Tuning & OptimizationMariaDB Server Performance Tuning & Optimization
MariaDB Server Performance Tuning & Optimization
 
Advance python
Advance pythonAdvance python
Advance python
 
Redis cluster
Redis clusterRedis cluster
Redis cluster
 
MySQL Replication Overview -- PHPTek 2016
MySQL Replication Overview -- PHPTek 2016MySQL Replication Overview -- PHPTek 2016
MySQL Replication Overview -- PHPTek 2016
 
Tools for Solving Performance Issues
Tools for Solving Performance IssuesTools for Solving Performance Issues
Tools for Solving Performance Issues
 
[2018] MySQL 이중화 진화기
[2018] MySQL 이중화 진화기[2018] MySQL 이중화 진화기
[2018] MySQL 이중화 진화기
 
Test NG Framework Complete Walk Through
Test NG Framework Complete Walk ThroughTest NG Framework Complete Walk Through
Test NG Framework Complete Walk Through
 
Tips on how to improve the performance of your custom modules for high volume...
Tips on how to improve the performance of your custom modules for high volume...Tips on how to improve the performance of your custom modules for high volume...
Tips on how to improve the performance of your custom modules for high volume...
 
Troubleshooting PostgreSQL Streaming Replication
Troubleshooting PostgreSQL Streaming ReplicationTroubleshooting PostgreSQL Streaming Replication
Troubleshooting PostgreSQL Streaming Replication
 
API Testing following the Test Pyramid
API Testing following the Test PyramidAPI Testing following the Test Pyramid
API Testing following the Test Pyramid
 
MySQL Parallel Replication: inventory, use-case and limitations
MySQL Parallel Replication: inventory, use-case and limitationsMySQL Parallel Replication: inventory, use-case and limitations
MySQL Parallel Replication: inventory, use-case and limitations
 
Postgresql Database Administration- Day3
Postgresql Database Administration- Day3Postgresql Database Administration- Day3
Postgresql Database Administration- Day3
 
Django Web Application Security
Django Web Application SecurityDjango Web Application Security
Django Web Application Security
 
[pgday.Seoul 2022] POSTGRES 테스트코드로 기여하기 - 이동욱
[pgday.Seoul 2022] POSTGRES 테스트코드로 기여하기 - 이동욱[pgday.Seoul 2022] POSTGRES 테스트코드로 기여하기 - 이동욱
[pgday.Seoul 2022] POSTGRES 테스트코드로 기여하기 - 이동욱
 
MySQL_SQL_Tunning_v0.1.3.docx
MySQL_SQL_Tunning_v0.1.3.docxMySQL_SQL_Tunning_v0.1.3.docx
MySQL_SQL_Tunning_v0.1.3.docx
 

Similar to Porque VIM?

Edge trends mizuno-template
Edge trends mizuno-templateEdge trends mizuno-template
Edge trends mizuno-template
shintaro mizuno
 
Logstash for SEO: come monitorare i Log del Web Server in realtime
Logstash for SEO: come monitorare i Log del Web Server in realtimeLogstash for SEO: come monitorare i Log del Web Server in realtime
Logstash for SEO: come monitorare i Log del Web Server in realtime
Andrea Cardinale
 
Twas the night before Malware...
Twas the night before Malware...Twas the night before Malware...
Twas the night before Malware...
DoktorMandrake
 
Unix shell scripting basics
Unix shell scripting basicsUnix shell scripting basics
Unix shell scripting basicsAbhay Sapru
 
Unix Shell Scripting Basics
Unix Shell Scripting BasicsUnix Shell Scripting Basics
Unix Shell Scripting BasicsDr.Ravi
 
Mac OS X Lion で作る WordPress local 環境
Mac OS X Lion で作る WordPress local 環境Mac OS X Lion で作る WordPress local 環境
Mac OS X Lion で作る WordPress local 環境
Yuriko IKEDA
 
DevLOVE ターミナル勉強会 zsh + screen
DevLOVE ターミナル勉強会 zsh + screenDevLOVE ターミナル勉強会 zsh + screen
DevLOVE ターミナル勉強会 zsh + screen
Yozo SATO
 
SLES11で構築するXen仮想化+HAクラスタ入門
SLES11で構築するXen仮想化+HAクラスタ入門SLES11で構築するXen仮想化+HAクラスタ入門
SLES11で構築するXen仮想化+HAクラスタ入門
VirtualTech Japan Inc.
 
Version Control and Git - GitHub Workshop
Version Control and Git - GitHub WorkshopVersion Control and Git - GitHub Workshop
Version Control and Git - GitHub Workshop
All Things Open
 
Zero to Sixty: AWS Elastic Beanstalk (DMG204) | AWS re:Invent 2013
Zero to Sixty: AWS Elastic Beanstalk (DMG204) | AWS re:Invent 2013Zero to Sixty: AWS Elastic Beanstalk (DMG204) | AWS re:Invent 2013
Zero to Sixty: AWS Elastic Beanstalk (DMG204) | AWS re:Invent 2013
Amazon Web Services
 
Noah Zoschke at Waza 2013: Heroku Secrets
Noah Zoschke at Waza 2013: Heroku SecretsNoah Zoschke at Waza 2013: Heroku Secrets
Noah Zoschke at Waza 2013: Heroku Secrets
Heroku
 
Танки_в_Лунапарке: нагрузочное_тестирование_в_Яндексе
Танки_в_Лунапарке: нагрузочное_тестирование_в_ЯндексеТанки_в_Лунапарке: нагрузочное_тестирование_в_Яндексе
Танки_в_Лунапарке: нагрузочное_тестирование_в_Яндексе
Yandex
 
Logs: O que comem, onde vivem e como se reproduzem.
Logs: O que comem, onde vivem e como se reproduzem.Logs: O que comem, onde vivem e como se reproduzem.
Logs: O que comem, onde vivem e como se reproduzem.
Augusto Pascutti
 
Malcon2017
Malcon2017Malcon2017
Cooking with Chef
Cooking with ChefCooking with Chef
Cooking with Chef
Orlando_Ruby_Users_Group
 
Piwik elasticsearch kibana at OSC Tokyo 2016 Spring
Piwik elasticsearch kibana at OSC Tokyo 2016 SpringPiwik elasticsearch kibana at OSC Tokyo 2016 Spring
Piwik elasticsearch kibana at OSC Tokyo 2016 Spring
Takashi Yamamoto
 
Gaelyk
GaelykGaelyk
From zero to hero - Easy log centralization with Logstash and Elasticsearch
From zero to hero - Easy log centralization with Logstash and ElasticsearchFrom zero to hero - Easy log centralization with Logstash and Elasticsearch
From zero to hero - Easy log centralization with Logstash and Elasticsearch
Rafał Kuć
 
From Zero to Hero - Centralized Logging with Logstash & Elasticsearch
From Zero to Hero - Centralized Logging with Logstash & ElasticsearchFrom Zero to Hero - Centralized Logging with Logstash & Elasticsearch
From Zero to Hero - Centralized Logging with Logstash & Elasticsearch
Sematext Group, Inc.
 
More Secrets of JavaScript Libraries
More Secrets of JavaScript LibrariesMore Secrets of JavaScript Libraries
More Secrets of JavaScript Libraries
jeresig
 

Similar to Porque VIM? (20)

Edge trends mizuno-template
Edge trends mizuno-templateEdge trends mizuno-template
Edge trends mizuno-template
 
Logstash for SEO: come monitorare i Log del Web Server in realtime
Logstash for SEO: come monitorare i Log del Web Server in realtimeLogstash for SEO: come monitorare i Log del Web Server in realtime
Logstash for SEO: come monitorare i Log del Web Server in realtime
 
Twas the night before Malware...
Twas the night before Malware...Twas the night before Malware...
Twas the night before Malware...
 
Unix shell scripting basics
Unix shell scripting basicsUnix shell scripting basics
Unix shell scripting basics
 
Unix Shell Scripting Basics
Unix Shell Scripting BasicsUnix Shell Scripting Basics
Unix Shell Scripting Basics
 
Mac OS X Lion で作る WordPress local 環境
Mac OS X Lion で作る WordPress local 環境Mac OS X Lion で作る WordPress local 環境
Mac OS X Lion で作る WordPress local 環境
 
DevLOVE ターミナル勉強会 zsh + screen
DevLOVE ターミナル勉強会 zsh + screenDevLOVE ターミナル勉強会 zsh + screen
DevLOVE ターミナル勉強会 zsh + screen
 
SLES11で構築するXen仮想化+HAクラスタ入門
SLES11で構築するXen仮想化+HAクラスタ入門SLES11で構築するXen仮想化+HAクラスタ入門
SLES11で構築するXen仮想化+HAクラスタ入門
 
Version Control and Git - GitHub Workshop
Version Control and Git - GitHub WorkshopVersion Control and Git - GitHub Workshop
Version Control and Git - GitHub Workshop
 
Zero to Sixty: AWS Elastic Beanstalk (DMG204) | AWS re:Invent 2013
Zero to Sixty: AWS Elastic Beanstalk (DMG204) | AWS re:Invent 2013Zero to Sixty: AWS Elastic Beanstalk (DMG204) | AWS re:Invent 2013
Zero to Sixty: AWS Elastic Beanstalk (DMG204) | AWS re:Invent 2013
 
Noah Zoschke at Waza 2013: Heroku Secrets
Noah Zoschke at Waza 2013: Heroku SecretsNoah Zoschke at Waza 2013: Heroku Secrets
Noah Zoschke at Waza 2013: Heroku Secrets
 
Танки_в_Лунапарке: нагрузочное_тестирование_в_Яндексе
Танки_в_Лунапарке: нагрузочное_тестирование_в_ЯндексеТанки_в_Лунапарке: нагрузочное_тестирование_в_Яндексе
Танки_в_Лунапарке: нагрузочное_тестирование_в_Яндексе
 
Logs: O que comem, onde vivem e como se reproduzem.
Logs: O que comem, onde vivem e como se reproduzem.Logs: O que comem, onde vivem e como se reproduzem.
Logs: O que comem, onde vivem e como se reproduzem.
 
Malcon2017
Malcon2017Malcon2017
Malcon2017
 
Cooking with Chef
Cooking with ChefCooking with Chef
Cooking with Chef
 
Piwik elasticsearch kibana at OSC Tokyo 2016 Spring
Piwik elasticsearch kibana at OSC Tokyo 2016 SpringPiwik elasticsearch kibana at OSC Tokyo 2016 Spring
Piwik elasticsearch kibana at OSC Tokyo 2016 Spring
 
Gaelyk
GaelykGaelyk
Gaelyk
 
From zero to hero - Easy log centralization with Logstash and Elasticsearch
From zero to hero - Easy log centralization with Logstash and ElasticsearchFrom zero to hero - Easy log centralization with Logstash and Elasticsearch
From zero to hero - Easy log centralization with Logstash and Elasticsearch
 
From Zero to Hero - Centralized Logging with Logstash & Elasticsearch
From Zero to Hero - Centralized Logging with Logstash & ElasticsearchFrom Zero to Hero - Centralized Logging with Logstash & Elasticsearch
From Zero to Hero - Centralized Logging with Logstash & Elasticsearch
 
More Secrets of JavaScript Libraries
More Secrets of JavaScript LibrariesMore Secrets of JavaScript Libraries
More Secrets of JavaScript Libraries
 

More from Augusto Pascutti

Errors
ErrorsErrors
Melhorando sua API com DSLs
Melhorando sua API com DSLsMelhorando sua API com DSLs
Melhorando sua API com DSLs
Augusto Pascutti
 
TDD - Test Driven Development (em PHP)
TDD - Test Driven Development (em PHP)TDD - Test Driven Development (em PHP)
TDD - Test Driven Development (em PHP)
Augusto Pascutti
 
Guia do mochileiro para escalabilidade
Guia do mochileiro para escalabilidadeGuia do mochileiro para escalabilidade
Guia do mochileiro para escalabilidade
Augusto Pascutti
 
Falhando miseralvelmente com PHP
Falhando miseralvelmente com PHPFalhando miseralvelmente com PHP
Falhando miseralvelmente com PHP
Augusto Pascutti
 
SfCon: Test Driven Development
SfCon: Test Driven DevelopmentSfCon: Test Driven Development
SfCon: Test Driven Development
Augusto Pascutti
 
Orientação a objetos v2
Orientação a objetos v2Orientação a objetos v2
Orientação a objetos v2
Augusto Pascutti
 
Como escalar aplicações PHP
Como escalar aplicações PHPComo escalar aplicações PHP
Como escalar aplicações PHP
Augusto Pascutti
 
Somos jardineiros
Somos jardineirosSomos jardineiros
Somos jardineiros
Augusto Pascutti
 
PHP - O que, porquê e como
PHP - O que, porquê e comoPHP - O que, porquê e como
PHP - O que, porquê e como
Augusto Pascutti
 
Frameworks PHP
Frameworks PHPFrameworks PHP
Frameworks PHP
Augusto Pascutti
 
Testar é bom, integrar é ainda melhor
Testar é bom, integrar é ainda melhorTestar é bom, integrar é ainda melhor
Testar é bom, integrar é ainda melhor
Augusto Pascutti
 
PHPSC Conference 2010 - Testar é bom, integrar é melhor ainda!
PHPSC Conference 2010 - Testar é bom, integrar é melhor ainda!PHPSC Conference 2010 - Testar é bom, integrar é melhor ainda!
PHPSC Conference 2010 - Testar é bom, integrar é melhor ainda!
Augusto Pascutti
 
Segurança em PHP
Segurança em PHPSegurança em PHP
Segurança em PHP
Augusto Pascutti
 
Orientação a Objetos com PHP
Orientação a Objetos com PHPOrientação a Objetos com PHP
Orientação a Objetos com PHPAugusto Pascutti
 
Boas Práticas, Práticas !
Boas Práticas, Práticas !Boas Práticas, Práticas !
Boas Práticas, Práticas !
Augusto Pascutti
 
Mitos do PHP
Mitos do PHPMitos do PHP
Mitos do PHP
Augusto Pascutti
 
Mão na Massa: Orientação a Objetos na Prática
Mão na Massa: Orientação a Objetos na PráticaMão na Massa: Orientação a Objetos na Prática
Mão na Massa: Orientação a Objetos na Prática
Augusto Pascutti
 

More from Augusto Pascutti (20)

Errors
ErrorsErrors
Errors
 
Melhorando sua API com DSLs
Melhorando sua API com DSLsMelhorando sua API com DSLs
Melhorando sua API com DSLs
 
TDD - Test Driven Development (em PHP)
TDD - Test Driven Development (em PHP)TDD - Test Driven Development (em PHP)
TDD - Test Driven Development (em PHP)
 
Guia do mochileiro para escalabilidade
Guia do mochileiro para escalabilidadeGuia do mochileiro para escalabilidade
Guia do mochileiro para escalabilidade
 
Falhando miseralvelmente com PHP
Falhando miseralvelmente com PHPFalhando miseralvelmente com PHP
Falhando miseralvelmente com PHP
 
SfCon: Test Driven Development
SfCon: Test Driven DevelopmentSfCon: Test Driven Development
SfCon: Test Driven Development
 
Orientação a objetos v2
Orientação a objetos v2Orientação a objetos v2
Orientação a objetos v2
 
Under engineer
Under engineerUnder engineer
Under engineer
 
Como escalar aplicações PHP
Como escalar aplicações PHPComo escalar aplicações PHP
Como escalar aplicações PHP
 
The small things
The small thingsThe small things
The small things
 
Somos jardineiros
Somos jardineirosSomos jardineiros
Somos jardineiros
 
PHP - O que, porquê e como
PHP - O que, porquê e comoPHP - O que, porquê e como
PHP - O que, porquê e como
 
Frameworks PHP
Frameworks PHPFrameworks PHP
Frameworks PHP
 
Testar é bom, integrar é ainda melhor
Testar é bom, integrar é ainda melhorTestar é bom, integrar é ainda melhor
Testar é bom, integrar é ainda melhor
 
PHPSC Conference 2010 - Testar é bom, integrar é melhor ainda!
PHPSC Conference 2010 - Testar é bom, integrar é melhor ainda!PHPSC Conference 2010 - Testar é bom, integrar é melhor ainda!
PHPSC Conference 2010 - Testar é bom, integrar é melhor ainda!
 
Segurança em PHP
Segurança em PHPSegurança em PHP
Segurança em PHP
 
Orientação a Objetos com PHP
Orientação a Objetos com PHPOrientação a Objetos com PHP
Orientação a Objetos com PHP
 
Boas Práticas, Práticas !
Boas Práticas, Práticas !Boas Práticas, Práticas !
Boas Práticas, Práticas !
 
Mitos do PHP
Mitos do PHPMitos do PHP
Mitos do PHP
 
Mão na Massa: Orientação a Objetos na Prática
Mão na Massa: Orientação a Objetos na PráticaMão na Massa: Orientação a Objetos na Prática
Mão na Massa: Orientação a Objetos na Prática
 

Recently uploaded

Vitthal Shirke Microservices Resume Montevideo
Vitthal Shirke Microservices Resume MontevideoVitthal Shirke Microservices Resume Montevideo
Vitthal Shirke Microservices Resume Montevideo
Vitthal Shirke
 
Understanding Globus Data Transfers with NetSage
Understanding Globus Data Transfers with NetSageUnderstanding Globus Data Transfers with NetSage
Understanding Globus Data Transfers with NetSage
Globus
 
Graphic Design Crash Course for beginners
Graphic Design Crash Course for beginnersGraphic Design Crash Course for beginners
Graphic Design Crash Course for beginners
e20449
 
Providing Globus Services to Users of JASMIN for Environmental Data Analysis
Providing Globus Services to Users of JASMIN for Environmental Data AnalysisProviding Globus Services to Users of JASMIN for Environmental Data Analysis
Providing Globus Services to Users of JASMIN for Environmental Data Analysis
Globus
 
TROUBLESHOOTING 9 TYPES OF OUTOFMEMORYERROR
TROUBLESHOOTING 9 TYPES OF OUTOFMEMORYERRORTROUBLESHOOTING 9 TYPES OF OUTOFMEMORYERROR
TROUBLESHOOTING 9 TYPES OF OUTOFMEMORYERROR
Tier1 app
 
Globus Compute Introduction - GlobusWorld 2024
Globus Compute Introduction - GlobusWorld 2024Globus Compute Introduction - GlobusWorld 2024
Globus Compute Introduction - GlobusWorld 2024
Globus
 
In 2015, I used to write extensions for Joomla, WordPress, phpBB3, etc and I ...
In 2015, I used to write extensions for Joomla, WordPress, phpBB3, etc and I ...In 2015, I used to write extensions for Joomla, WordPress, phpBB3, etc and I ...
In 2015, I used to write extensions for Joomla, WordPress, phpBB3, etc and I ...
Juraj Vysvader
 
Cracking the code review at SpringIO 2024
Cracking the code review at SpringIO 2024Cracking the code review at SpringIO 2024
Cracking the code review at SpringIO 2024
Paco van Beckhoven
 
2024 RoOUG Security model for the cloud.pptx
2024 RoOUG Security model for the cloud.pptx2024 RoOUG Security model for the cloud.pptx
2024 RoOUG Security model for the cloud.pptx
Georgi Kodinov
 
Quarkus Hidden and Forbidden Extensions
Quarkus Hidden and Forbidden ExtensionsQuarkus Hidden and Forbidden Extensions
Quarkus Hidden and Forbidden Extensions
Max Andersen
 
Lecture 1 Introduction to games development
Lecture 1 Introduction to games developmentLecture 1 Introduction to games development
Lecture 1 Introduction to games development
abdulrafaychaudhry
 
Accelerate Enterprise Software Engineering with Platformless
Accelerate Enterprise Software Engineering with PlatformlessAccelerate Enterprise Software Engineering with Platformless
Accelerate Enterprise Software Engineering with Platformless
WSO2
 
A Sighting of filterA in Typelevel Rite of Passage
A Sighting of filterA in Typelevel Rite of PassageA Sighting of filterA in Typelevel Rite of Passage
A Sighting of filterA in Typelevel Rite of Passage
Philip Schwarz
 
Cyaniclab : Software Development Agency Portfolio.pdf
Cyaniclab : Software Development Agency Portfolio.pdfCyaniclab : Software Development Agency Portfolio.pdf
Cyaniclab : Software Development Agency Portfolio.pdf
Cyanic lab
 
Exploring Innovations in Data Repository Solutions - Insights from the U.S. G...
Exploring Innovations in Data Repository Solutions - Insights from the U.S. G...Exploring Innovations in Data Repository Solutions - Insights from the U.S. G...
Exploring Innovations in Data Repository Solutions - Insights from the U.S. G...
Globus
 
AI Pilot Review: The World’s First Virtual Assistant Marketing Suite
AI Pilot Review: The World’s First Virtual Assistant Marketing SuiteAI Pilot Review: The World’s First Virtual Assistant Marketing Suite
AI Pilot Review: The World’s First Virtual Assistant Marketing Suite
Google
 
Large Language Models and the End of Programming
Large Language Models and the End of ProgrammingLarge Language Models and the End of Programming
Large Language Models and the End of Programming
Matt Welsh
 
Enhancing Project Management Efficiency_ Leveraging AI Tools like ChatGPT.pdf
Enhancing Project Management Efficiency_ Leveraging AI Tools like ChatGPT.pdfEnhancing Project Management Efficiency_ Leveraging AI Tools like ChatGPT.pdf
Enhancing Project Management Efficiency_ Leveraging AI Tools like ChatGPT.pdf
Jay Das
 
Prosigns: Transforming Business with Tailored Technology Solutions
Prosigns: Transforming Business with Tailored Technology SolutionsProsigns: Transforming Business with Tailored Technology Solutions
Prosigns: Transforming Business with Tailored Technology Solutions
Prosigns
 
Webinar: Salesforce Document Management 2.0 - Smarter, Faster, Better
Webinar: Salesforce Document Management 2.0 - Smarter, Faster, BetterWebinar: Salesforce Document Management 2.0 - Smarter, Faster, Better
Webinar: Salesforce Document Management 2.0 - Smarter, Faster, Better
XfilesPro
 

Recently uploaded (20)

Vitthal Shirke Microservices Resume Montevideo
Vitthal Shirke Microservices Resume MontevideoVitthal Shirke Microservices Resume Montevideo
Vitthal Shirke Microservices Resume Montevideo
 
Understanding Globus Data Transfers with NetSage
Understanding Globus Data Transfers with NetSageUnderstanding Globus Data Transfers with NetSage
Understanding Globus Data Transfers with NetSage
 
Graphic Design Crash Course for beginners
Graphic Design Crash Course for beginnersGraphic Design Crash Course for beginners
Graphic Design Crash Course for beginners
 
Providing Globus Services to Users of JASMIN for Environmental Data Analysis
Providing Globus Services to Users of JASMIN for Environmental Data AnalysisProviding Globus Services to Users of JASMIN for Environmental Data Analysis
Providing Globus Services to Users of JASMIN for Environmental Data Analysis
 
TROUBLESHOOTING 9 TYPES OF OUTOFMEMORYERROR
TROUBLESHOOTING 9 TYPES OF OUTOFMEMORYERRORTROUBLESHOOTING 9 TYPES OF OUTOFMEMORYERROR
TROUBLESHOOTING 9 TYPES OF OUTOFMEMORYERROR
 
Globus Compute Introduction - GlobusWorld 2024
Globus Compute Introduction - GlobusWorld 2024Globus Compute Introduction - GlobusWorld 2024
Globus Compute Introduction - GlobusWorld 2024
 
In 2015, I used to write extensions for Joomla, WordPress, phpBB3, etc and I ...
In 2015, I used to write extensions for Joomla, WordPress, phpBB3, etc and I ...In 2015, I used to write extensions for Joomla, WordPress, phpBB3, etc and I ...
In 2015, I used to write extensions for Joomla, WordPress, phpBB3, etc and I ...
 
Cracking the code review at SpringIO 2024
Cracking the code review at SpringIO 2024Cracking the code review at SpringIO 2024
Cracking the code review at SpringIO 2024
 
2024 RoOUG Security model for the cloud.pptx
2024 RoOUG Security model for the cloud.pptx2024 RoOUG Security model for the cloud.pptx
2024 RoOUG Security model for the cloud.pptx
 
Quarkus Hidden and Forbidden Extensions
Quarkus Hidden and Forbidden ExtensionsQuarkus Hidden and Forbidden Extensions
Quarkus Hidden and Forbidden Extensions
 
Lecture 1 Introduction to games development
Lecture 1 Introduction to games developmentLecture 1 Introduction to games development
Lecture 1 Introduction to games development
 
Accelerate Enterprise Software Engineering with Platformless
Accelerate Enterprise Software Engineering with PlatformlessAccelerate Enterprise Software Engineering with Platformless
Accelerate Enterprise Software Engineering with Platformless
 
A Sighting of filterA in Typelevel Rite of Passage
A Sighting of filterA in Typelevel Rite of PassageA Sighting of filterA in Typelevel Rite of Passage
A Sighting of filterA in Typelevel Rite of Passage
 
Cyaniclab : Software Development Agency Portfolio.pdf
Cyaniclab : Software Development Agency Portfolio.pdfCyaniclab : Software Development Agency Portfolio.pdf
Cyaniclab : Software Development Agency Portfolio.pdf
 
Exploring Innovations in Data Repository Solutions - Insights from the U.S. G...
Exploring Innovations in Data Repository Solutions - Insights from the U.S. G...Exploring Innovations in Data Repository Solutions - Insights from the U.S. G...
Exploring Innovations in Data Repository Solutions - Insights from the U.S. G...
 
AI Pilot Review: The World’s First Virtual Assistant Marketing Suite
AI Pilot Review: The World’s First Virtual Assistant Marketing SuiteAI Pilot Review: The World’s First Virtual Assistant Marketing Suite
AI Pilot Review: The World’s First Virtual Assistant Marketing Suite
 
Large Language Models and the End of Programming
Large Language Models and the End of ProgrammingLarge Language Models and the End of Programming
Large Language Models and the End of Programming
 
Enhancing Project Management Efficiency_ Leveraging AI Tools like ChatGPT.pdf
Enhancing Project Management Efficiency_ Leveraging AI Tools like ChatGPT.pdfEnhancing Project Management Efficiency_ Leveraging AI Tools like ChatGPT.pdf
Enhancing Project Management Efficiency_ Leveraging AI Tools like ChatGPT.pdf
 
Prosigns: Transforming Business with Tailored Technology Solutions
Prosigns: Transforming Business with Tailored Technology SolutionsProsigns: Transforming Business with Tailored Technology Solutions
Prosigns: Transforming Business with Tailored Technology Solutions
 
Webinar: Salesforce Document Management 2.0 - Smarter, Faster, Better
Webinar: Salesforce Document Management 2.0 - Smarter, Faster, BetterWebinar: Salesforce Document Management 2.0 - Smarter, Faster, Better
Webinar: Salesforce Document Management 2.0 - Smarter, Faster, Better
 

Porque VIM?

  • 1. 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
  • 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
  • 4.
  • 5. 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
  • 6. O Q U E É U M B O M S O F T WA R E ?
  • 7. 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
  • 8. C O M O C R I A R B O M S O F T WA R E ?
  • 9. “ C O M O C O Z I N H A R B E M ? ”
  • 10. “ C O M A B O A C O M I D A ”
  • 11. 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
  • 12. – 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.”
  • 13. 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.
  • 14. E X E M P L O S
  • 15. A N A LY 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 -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"
  • 22. #!/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"
  • 23. #!/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
  • 24. #!/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
  • 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 O W S E R U S E D IE 1% Chrome 39% Firefox 60%
  • 28. G I T
  • 29. G I T T O W E R
  • 30. M E U R E P O S I T Ó R I O
  • 31. B R A N C H E S
  • 32. L O G
  • 33. C O M M I T
  • 34. H A H A H A
  • 35. [~/symfony] $ git branch * 2.7
  • 36. [~/symfony] $ git branch * 2.7 [~/symfony] $ git log | wc -l 299 348
  • 37. [~/symfony] $ git branch * 2.7 [~/symfony] $ git log | wc -l 299 348 [~/symfony] $ alias rank="sort | uniq -c | sort -nr | head -n 3“
  • 38. [~/symfony] $ git branch * 2.7 [~/symfony] $ git log | wc -l 299 348 [~/symfony] $ alias rank="sort | uniq -c | sort -nr | head -n 3“
  • 39. [~/symfony] $ git branch * 2.7 [~/symfony] $ git log | wc -l 299 348 [~/symfony] $ alias rank="sort | uniq -c | sort -nr | head -n 3“
  • 40. [~/symfony] $ git branch * 2.7 [~/symfony] $ git log | wc -l 299 348 [~/symfony] $ alias rank="sort | uniq -c | sort -nr | head -n 3“
  • 41. [~/symfony] $ git branch * 2.7 [~/symfony] $ git log | wc -l 299 348 [~/symfony] $ alias rank="sort | uniq -c | sort -nr | head -n 3“
  • 42. [~/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
  • 43. [~/symfony] $ git config alias.author "log --format=%an"
  • 44. [~/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
  • 45.
  • 46.
  • 48. [~/symfony] $ cd ../zf2 [~/zf2] $
  • 49. [~/symfony] $ cd ../zf2 [~/zf2] $ git author | rank 7963 Matthew Weier O'Phinney 1647 Marco Pivetta 782 Maks3w
  • 50.
  • 51. [~/zf2] $ git author --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] $ git author --since `hdate -1year` | rank 1358 Marco Pivetta 564 Matthew Weier O'Phinney 132 Abdul Malik Ikhsan
  • 54. E D I T O R
  • 55. V O LTA N D O A O T R A B A L H O
  • 56. [~/zf2] $ git diff --name-only HEAD^ library/Zend/Db/Sql/AbstractSql.php tests/ZendTest/Db/Sql/AbstractSqlTest.php tests/ZendTest/Db/Sql/ExpressionTest.php
  • 57. [~/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^`
  • 58. L I N T ?
  • 59. < E S C > : ! P H P - L %
  • 60. < E S C > : ! P H P - L % N O R M A L M O D E
  • 61. < E S C > : ! P H P - L % C O M A N D O E X T E R N O
  • 62. < E S C > : ! P H P - L % O P Ç Ã O “ L I N T ” D O P H P
  • 63. < 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
  • 64. R O D A R U M T E S T E ?
  • 65. C H E C 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 I C I O N A R N O G I T ?
  • 68. 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
  • 69. 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!
  • 70. L I M I T E S S Ã O B O N S ? C O N C L U S Ã O Cartier Bresson
  • 71. P E R G U N TA S ? W Eugene Smith
  • 72. 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 Ê ?