um ”making of”hisham.hm/papers/talks/htop-phpexperience2017.pdf · slide: [ ] presenter:...
TRANSCRIPT
PID USER PRI NI VIRT RES SHR S CPU% MEM% TIME+ Command
Slide: [ ]
Presenter: @hisham_hmTalk: A história do htop
A história do htopum ”making of”
Hisham Muhammad@hisham_hm http://hisham.hm
Date: 28/03/20172
PID USER PRI NI VIRT RES SHR S CPU% MEM% TIME+ Command
Slide: [ ]
Presenter: @hisham_hmTalk: A história do htop
Sobre mim
autor original do htop, um projeto iniciado em 2004
http://hisham.hm/htop/
desenvolvedor principal do LuaRocks, o gerenciador de pacotes da linguagem Lua
http://luarocks.org/
co-fundador da distribuição GoboLinux
http://gobolinux.org/
Date: 28/03/20173
PID USER PRI NI VIRT RES SHR S CPU% MEM% TIME+ Command
Slide: [ ]
Presenter: @hisham_hmTalk: A história do htop
O que é o htop
um gerenciador de tarefas interativo
o objetivo era ser um “top melhorado”
o que eu queria dizer com isso: scrolling!
(as versões do top melhoraram muito de lá pra cá!)
Date: 28/03/20174
PID USER PRI NI VIRT RES SHR S CPU% MEM% TIME+ Command
Slide: [ ]
Presenter: @hisham_hmTalk: A história do htop
O top
Date: 28/03/20175
PID USER PRI NI VIRT RES SHR S CPU% MEM% TIME+ Command
Slide: [ ]
Presenter: @hisham_hmTalk: A história do htop
Hello, htop!
Date: 28/03/20176
PID USER PRI NI VIRT RES SHR S CPU% MEM% TIME+ Command
Slide: [ ]
Presenter: @hisham_hmTalk: A história do htop
Motivações iniciais
Resolver um problema próprio
(“scratch your itch”)
Aprender!
Date: 28/03/20177
PID USER PRI NI VIRT RES SHR S CPU% MEM% TIME+ Command
Slide: [ ]
Presenter: @hisham_hmTalk: A história do htop
“Refazer” um programa clássico
!?
Date: 28/03/20178
PID USER PRI NI VIRT RES SHR S CPU% MEM% TIME+ Command
Slide: [ ]
Presenter: @hisham_hmTalk: A história do htop
“Refazer” um programa clássico
Date: 28/03/20179
PID USER PRI NI VIRT RES SHR S CPU% MEM% TIME+ Command
Slide: [ ]
Presenter: @hisham_hmTalk: A história do htop
“Refazer” um programa clássico
...não é um bicho de sete cabeças
Os programas que você usa todo dia não são mágicos
Date: 28/03/201710
PID USER PRI NI VIRT RES SHR S CPU% MEM% TIME+ Command
Slide: [ ]
Presenter: @hisham_hmTalk: A história do htop
Como obter os dados dos processos?
O kernel os apresenta em /proc
Um sistema de arquivos virtual
/proc/12345/mem
/proc/12345/stat
/proc/cpuinfo...
Date: 28/03/201711
PID USER PRI NI VIRT RES SHR S CPU% MEM% TIME+ Command
Slide: [ ]
Presenter: @hisham_hmTalk: A história do htop
Como ler esses dados?
Ora, da maneira mais óbvia e simples possível
open()
read()
close()
Date: 28/03/201712
PID USER PRI NI VIRT RES SHR S CPU% MEM% TIME+ Command
Slide: [ ]
Presenter: @hisham_hmTalk: A história do htop
Mas como o top faz?
strace top 2> top.log
Date: 28/03/201713
PID USER PRI NI VIRT RES SHR S CPU% MEM% TIME+ Command
Slide: [ ]
Presenter: @hisham_hmTalk: A história do htop
Date: 28/03/201714
PID USER PRI NI VIRT RES SHR S CPU% MEM% TIME+ Command
Slide: [ ]
Presenter: @hisham_hmTalk: A história do htop
Date: 28/03/201715
PID USER PRI NI VIRT RES SHR S CPU% MEM% TIME+ Command
Slide: [ ]
Presenter: @hisham_hmTalk: A história do htop
Aí “só era questão de programar”
Ler os dados do /proc
“Desenhar” a interface
Date: 28/03/201716
PID USER PRI NI VIRT RES SHR S CPU% MEM% TIME+ Command
Slide: [ ]
Presenter: @hisham_hmTalk: A história do htop
Um detalhe sobre a interface
A arte imita a vida
A vida imita a arte
Date: 28/03/201717
PID USER PRI NI VIRT RES SHR S CPU% MEM% TIME+ Command
Slide: [ ]
Presenter: @hisham_hmTalk: A história do htop
Date: 28/03/201718
PID USER PRI NI VIRT RES SHR S CPU% MEM% TIME+ Command
Slide: [ ]
Presenter: @hisham_hmTalk: A história do htop
Date: 28/03/201719
PID USER PRI NI VIRT RES SHR S CPU% MEM% TIME+ Command
Slide: [ ]
Presenter: @hisham_hmTalk: A história do htop
Date: 28/03/201720
PID USER PRI NI VIRT RES SHR S CPU% MEM% TIME+ Command
Slide: [ ]
Presenter: @hisham_hmTalk: A história do htop
Date: 28/03/201721
PID USER PRI NI VIRT RES SHR S CPU% MEM% TIME+ Command
Slide: [ ]
Presenter: @hisham_hmTalk: A história do htop
Um programa que “deu certo”
Sempre é difícil descobrir o porquê
Alguns palpites sobre fatores que influenciaram
Date: 28/03/201722
PID USER PRI NI VIRT RES SHR S CPU% MEM% TIME+ Command
Slide: [ ]
Presenter: @hisham_hmTalk: A história do htop
Ubiquidade da plataforma
o terminal!
talvez a única plataforma hoje tão presente(para desenvolvedores)
quanto a web
Date: 28/03/201723
PID USER PRI NI VIRT RES SHR S CPU% MEM% TIME+ Command
Slide: [ ]
Presenter: @hisham_hmTalk: A história do htop
A linguagem
fazer em C
...mas não pelos motivos “óbvios”
Date: 28/03/201724
PID USER PRI NI VIRT RES SHR S CPU% MEM% TIME+ Command
Slide: [ ]
Presenter: @hisham_hmTalk: A história do htop
Facilidade de compilar em qualquer lugar
Poucas dependências:
ncurses
cores e coordenadas no terminal
todo Linux tem (dependência do Bash)
Date: 28/03/201725
PID USER PRI NI VIRT RES SHR S CPU% MEM% TIME+ Command
Slide: [ ]
Presenter: @hisham_hmTalk: A história do htop
Facilidade de compilar em qualquer lugar
Poucas dependências:
ncurses
cores e coordenadas no terminal
todo Linux tem (dependência do Bash)
e só
Date: 28/03/201726
PID USER PRI NI VIRT RES SHR S CPU% MEM% TIME+ Command
Slide: [ ]
Presenter: @hisham_hmTalk: A história do htop
Facilidade de compilar em qualquer lugar
Build com AutoTools:
./configure
make
sudo make install
Date: 28/03/201727
PID USER PRI NI VIRT RES SHR S CPU% MEM% TIME+ Command
Slide: [ ]
Presenter: @hisham_hmTalk: A história do htop
Facilidade de empacotar
Fácil de compilar
=
Fácil de empacotar em uma distro
Date: 28/03/201728
PID USER PRI NI VIRT RES SHR S CPU% MEM% TIME+ Command
Slide: [ ]
Presenter: @hisham_hmTalk: A história do htop
E assim começou o htop
htop-0.13.tar.gz
22kB
wc -l *.c
1684
Date: 28/03/201729
PID USER PRI NI VIRT RES SHR S CPU% MEM% TIME+ Command
Slide: [ ]
Presenter: @hisham_hmTalk: A história do htop
Para comparação
htop-2.0.2.tar.gz
476kB
wc -l *.c */*.c
13811
Date:
PID USER PRI NI VIRT RES SHR S CPU% MEM% TIME+ Command
Slide: [ ]
Presenter: @hisham_hmTalk: A história do htop
A grande mudança
Tornar o htop portável
Date: 28/03/201731
PID USER PRI NI VIRT RES SHR S CPU% MEM% TIME+ Command
Slide: [ ]
Presenter: @hisham_hmTalk: A história do htop
htop off-Linux
alguns usuários já rodavam no FreeBSD usando linprocfs (uma camada de emulação)
Date: 28/03/201732
PID USER PRI NI VIRT RES SHR S CPU% MEM% TIME+ Command
Slide: [ ]
Presenter: @hisham_hmTalk: A história do htop
Backstory
« A wild Mac OS X fork appears! »
um port ad-hoc do htop 0.8.2
Date: 28/03/201733
PID USER PRI NI VIRT RES SHR S CPU% MEM% TIME+ Command
Slide: [ ]
Presenter: @hisham_hmTalk: A história do htop
Passa o tempo
bug reports começam a aparecer
bugs antigos resolvidos há anos!
começa a ficar chato
Date: 28/03/201734
PID USER PRI NI VIRT RES SHR S CPU% MEM% TIME+ Command
Slide: [ ]
Presenter: @hisham_hmTalk: A história do htop
Crowdfunding
Portar o htop para Mac
1/3 da meta atingida
Date: 28/03/201735
PID USER PRI NI VIRT RES SHR S CPU% MEM% TIME+ Command
Slide: [ ]
Presenter: @hisham_hmTalk: A história do htop
Tornar o htop portável
Torná-lo mais fácil de ser portado
Abrir o caminho para novos ports
Date: 28/03/201736
PID USER PRI NI VIRT RES SHR S CPU% MEM% TIME+ Command
Slide: [ ]
Presenter: @hisham_hmTalk: A história do htop
Como quebrar a dependência de SO da maneira fácil
tente compilar em outro SO!
montar uma VM
primeira tentativa: FreeBSD
desisti rápido
segunda tentativa: PC-BSD
mais fácil para um usuário Linux!
Date: 28/03/201737
PID USER PRI NI VIRT RES SHR S CPU% MEM% TIME+ Command
Slide: [ ]
Presenter: @hisham_hmTalk: A história do htop
Abordagens para aplicações multi-plataforma
bases de código separadas
iOS vs. Android
um spaghetti de #ifdefs
às vezes é o jeito
APIs bem definidas entre a parte portável e não-portável
Date: 28/03/201738
PID USER PRI NI VIRT RES SHR S CPU% MEM% TIME+ Command
Slide: [ ]
Presenter: @hisham_hmTalk: A história do htop
Isolar a parte Linux
linux/
unsupported/
Date: 28/03/201739
PID USER PRI NI VIRT RES SHR S CPU% MEM% TIME+ Command
Slide: [ ]
Presenter: @hisham_hmTalk: A história do htop
Isolar a parte Linux
linux/
unsupported/
freebsd/
Date: 28/03/201740
PID USER PRI NI VIRT RES SHR S CPU% MEM% TIME+ Command
Slide: [ ]
Presenter: @hisham_hmTalk: A história do htop
Uma abordagem “OO”
Process.c
Process.h
ProcessList.c
ProcessList.h
...
linux/
LinuxProcess.c
LinuxProcessList.c
...
Date: 28/03/201741
PID USER PRI NI VIRT RES SHR S CPU% MEM% TIME+ Command
Slide: [ ]
Presenter: @hisham_hmTalk: A história do htop
Subi para o GitHub e...
unsupported/
linux/
freebsd/
Date: 28/03/201742
PID USER PRI NI VIRT RES SHR S CPU% MEM% TIME+ Command
Slide: [ ]
Presenter: @hisham_hmTalk: A história do htop
Subi para o Github e...
unsupported/
linux/
freebsd/ - merged PRs!
Date: 28/03/201743
PID USER PRI NI VIRT RES SHR S CPU% MEM% TIME+ Command
Slide: [ ]
Presenter: @hisham_hmTalk: A história do htop
Subi para o Github e...
unsupported/
linux/
freebsd/
openbsd/
Date: 28/03/201744
PID USER PRI NI VIRT RES SHR S CPU% MEM% TIME+ Command
Slide: [ ]
Presenter: @hisham_hmTalk: A história do htop
Subi para o Github e...
unsupported/
linux/
freebsd/
openbsd/
darwin/
Date: 28/03/201745
PID USER PRI NI VIRT RES SHR S CPU% MEM% TIME+ Command
Slide: [ ]
Presenter: @hisham_hmTalk: A história do htop
Impacto positivo
novas pessoas contribuindo
sempre algo bom!
maior diversidade de contribuições
Galera do OpenBSD e a preocupação com segurança!
alguém quer portar para o NetBSD?
...Cygwin!?
Date: 28/03/201746
PID USER PRI NI VIRT RES SHR S CPU% MEM% TIME+ Command
Slide: [ ]
Presenter: @hisham_hmTalk: A história do htop
Conclusões
Siga os padrões da sua comunidade
(código, empacotamento)
Portabilidade vale a pena mesmo
“Stratch your itch!”
Date: 28/03/201747
PID USER PRI NI VIRT RES SHR S CPU% MEM% TIME+ Command
Slide: [ ]
Presenter: @hisham_hmTalk: A história do htop
Obrigado!
http://hisham.hm/htop
http://github.com/hishamhm/htop
@hisham_hm