1. DESENVOLVIMENTO WEB COM
BROOK FRAMEWORK 3.0
APRESENTAÇÃO; INSTALAÇÃO; SUGESTÃO DE
IDEIAS; FORK; PULL REQUESTS; DOAÇÕES
Orientador: Silvio Clécio
RESUMO
Este artigo apresenta todos os passos iniciais para quem pretende conhecer,
baixar, instalar e usar o projeto Brook framework 3.0 no Lazarus 1.2.2 e Free
Pascal 2.6.4. O artigo consiste dos seguintes passos: Apresentação do projeto.
Instalação com dois cliques. Sugerindo ideias, solicitando novos recursos e
reportando bugs. Forkando o projeto. Abrindo um pull request. Fazendo uma
doação ao projeto.
PALAVRAS CHAVE: Brook 3.0. Apresentação. Instalação. Fork. Pull request.
Petrolina – PE
2014
2. 2Brook EaD – Desenvolvimento web com Brook framework 3.0
SUMÁRIO
APRESENTAÇÃO DO PROJETO.......................................................................................... 3
BAIXANDO O PACOTE DE INSTALAÇÃO.......................................................................... 5
INSTALAÇÃO COM DOIS CLIQUES .................................................................................... 5
SUGERINDO IDEIAS, SOLICITANDO NOVOS RECURSOS E REPORTANDO BUGS
....................................................................................................................................................... 7
FORKANDO O PROJETO ....................................................................................................... 8
ABRINDO UM PULL REQUEST............................................................................................. 8
FAZENDO UMA DOAÇÃO AO PROJETO ........................................................................... 8
PRÓXIMOS PASSOS ............................................................................................................... 9
REFERÊNCIAS .......................................................................................................................... 9
APÊNDICES ............................................................................................................................. 10
APÊNDICE A – Relatório de estatísticas do ApacheBench para um teste realizado com
uma aplicação FCLWeb/CGI:................................................................................................. 11
APÊNDICE B – Relatório de estatísticas do ApacheBench para um teste realizado com
uma aplicação Brook/CGI: ...................................................................................................... 12
APÊNDICE C – Relatório de estatísticas do ApacheBench para um teste realizado
com uma aplicação FCLWeb/FastCGI: ................................................................................ 13
APÊNDICE D – Relatório de estatísticas do ApacheBench para um teste realizado
com uma aplicação Brook/FastCGI:...................................................................................... 14
3. 3Brook EaD – Desenvolvimento web com Brook framework 3.0
APRESENTAÇÃO DO PROJETO
Brook nasceu a partir de um estudo sobre Object Pascal voltado para
desenvolvimento web, ou seja, compatível com aplicativos console.
Paralelamente a tal estudo, projetos de outras linguagens também foram
pesquisados, como Rails (Ruby) e Slim (PHP). Após o contato com estes dois
projetos, nasceu a ideia de roteamento e rotas, dando origem ao seu nome: “...
imagine um canal de água com canais menores interligados nele, cada pequeno
canal com sua própria rota, e o canal maior gerenciando o córrego de água
assincronamente cada um; no interior da Inglaterra, eles dão um nome para isso:
Brook”. Hoje, um dos recursos mais poderosos da Brook é o seu roteador,
fazendo jus ao que o seu nome sugere.
Com Brook, é possível criar aplicações web sem trocar de linguagem de
programação, ou seja, sem sair do Pascal. Logo abaixo, seguem algumas
vantagens específicas do projeto:
Estrutura em três camadas: Camada de dados (Model), camada de controle
(Controller) e camada de apresentação (View).1
Desempenho: Em um teste de performance realizado com o auxílio da
ferramenta ab – ApacheBench2, no Linux Mint 16 - 64 bits, em que a página
testada retornava apenas a palavra “testing it”, foi possível obter as seguintes
quantidade de requests por segundo em uma comparação entre uma aplicação
usando apenas FCLWeb, e outra usando Brook:
FCLWeb/CGI (detalhes no APÊNDICE A):
Complete requests: 1337
Brook/CGI (detalhes no APÊNDICE B):
Complete requests: 1303
FCLWeb/FastCGI (detalhes no APÊNDICE C):
Complete requests: 6832
Brook/FastCGI (detalhes no APÊNDICE D):
Complete requests: 6866
1
Um pouco sobre MVC: http://pt.wikipedia.org/wiki/MVC.
2
ab - Apache HTTP server benchmarking tool: http://httpd.apache.org/docs/2.2/programs/ab.html.
4. 4Brook EaD – Desenvolvimento web com Brook framework 3.0
Ou seja, baseado nos resultados acima, é possível observar que a
performance de aplicações Brook é completamente compatível com aplicações
puramente em FCLWeb, mesmo sem levar em conta as diversas funcionalidades
que um framework como ela agrega à aplicação.
Recursos – Utilização de vários protocolos (HTTP, CGI, FastCGI ...) de forma
transparente, isto é, pela simples troca de uma unit broker na cláusula uses.
Suporte a roteamento avançado – É a capacidade de mapear URLs para
ações. Recurso este que torna a Brook um passo à frente aos seus concorrentes.
Suporte a Mapeamento de Objetos – Formulários HTML são convertidos
automaticamente para objetos Pascal, com a vantagem de usar suas
propriedades com dados primitivos ao invés de conversões, por exemplo:
Sem mapeamento de objetos (Brook 2.*):
procedure TPersonAction.Post;
begin
Write('ID: %d, Name: %s', [Fields['id'].AsInt64, Fields['name'].AsString]);
end;
Código 1 - Action da Brook 2.*
Com mapeamento de objetos (Brook 3.0):
procedure TPersonAction.Post;
begin
Write('ID: %d, Name: %s', [Entity.Id, Entity.Name]);
end;
Código 2 - Action da Brook 3.0
Plug-ins – Brook contém uma apreciável quantidade de plug-ins e projetos
relacionados que aumentam sua produtividade. Plug-ins como JTemplate,
dOPF, RUtils, XMailer, entre outros, são encontrados facilmente aqui:
https://github.com/silvioprog?tab=repositories.
E claro, há vários outros recursos (Middleware, Constraints, Actions com
suporte a Generics etc.) na Brook, que serão abordados com ênfase em outros
artigos, no decorrer do curso.
Em suma, o projeto também está em constante evolução, recebendo
atualizações regularmente tanto dos seus idealizadores3, quanto de
3
Arquivo com o nome de alguns idealizadores do projeto Brook:
https://github.com/silvioprog/brookframework/blob/master/CONTRIBUTORS.txt.
5. 5Brook EaD – Desenvolvimento web com Brook framework 3.0
desenvolvedores de todo o mundo, que voluntariamente contribuem com o
projeto.
BAIXANDO O PACOTE DE INSTALAÇÃO
Como na maioria dos projetos, o primeiro passo a ser feito é baixar o
pacote de instalação da última versão lançada. Quando este artigo foi escrito, a
versão mais recente da Brook era a 3.0, disponível no seguinte link:
https://github.com/silvioprog/brookframework/releases/tag/v3.0.0.
Com duas opções para download:
1. Source code (zip);
2. Source code (tar.gz).
A opção usada neste artigo foi a Source code (zip), baixando o arquivo de
nome brookframework-3.0.0.zip.
INSTALAÇÃO COM DOIS CLIQUES
Com o arquivo brookframework-3.0.0.zip “em mãos”, basta descompactá-
lo, salvando todos os seus arquivos em alguma pasta no sistema, como por
exemplo: C:repositoryframeworkbrookframework-3.0.0, e, logo em seguida,
realizar os seguintes passos:
1. Abrir o arquivo C:repositoryframeworkbrookframework-3.0.0packages
brookex.lpk;
2. Na janela Package BrookEX, clicar no botão Use >>, menu Install.
A Figura 1 mostra a janela Package BrookEX, com as opções propostas
acima:
Figura 1 - Package BrookEX
6. 6Brook EaD – Desenvolvimento web com Brook framework 3.0
Para prosseguir, a instalação requer duas confirmações. A primeira é na
tela Automatically installed packages que, conforme Figura 2, informa quais
pacotes serão instalados, automaticamente:
Figura 2 - Automatically installed packages
A segunda tela, com a pergunta Rebuild Lazarus?, recebe a confirmação
para recompilar a IDE Lazarus, necessária para a instalação dos experts Brook,
abordados a seguir.
Após alguns instantes, quando a IDE retornar de sua recompilação, é
possível verificar se a instalação da Brook ocorreu com sucesso checando os
seus experts, que são instalados junto ao pacote, e, logo em seguida, disponíveis
no menu File | New ... > Brook framework, conforme ilustra a Figura 3:
Figura 3 - Expert Brook
7. 7Brook EaD – Desenvolvimento web com Brook framework 3.0
SUGERINDO IDEIAS, SOLICITANDO NOVOS RECURSOS E REPORTANDO
BUGS
O melhor do código aberto é a sua possibilidade de evolução. Com a
Brook não poderia ser diferente, é possível enviar novas ideias ao projeto,
solicitar a implementação de novos recursos, bem como relatar problemas. Para
qualquer uma destas opções, o local indicado para fazê-las é via página de
issues, no repositório do projeto, em:
https://github.com/silvioprog/brookframework/issues.
Para abrir um issue, é necessário o login no site Github, e, para aqueles
que ainda não o possui, é recomendável criar uma conta gratuitamente, em:
https://github.com/join.
Estando previamente logado no site Github, é possível abrir um issue.
Conforme Figura 4, este seria um modelo de issue para um pedido de
implementação de novo recurso no projeto:
Figura 4 - New issue
Substituindo Your title e Your feature request ... pelo título e pedido de
recurso, respectivamente, logo em seguida, fazendo a confirmação, via botão
Submit new issue.
8. 8Brook EaD – Desenvolvimento web com Brook framework 3.0
FORKANDO O PROJETO
O site Github permite realizar fork de repositório, isto é, copiar um
repositório inteiro – tornando-se dono dele – para uma conta Github pessoal, no
entanto, mantendo intacto o código no repositório original. A vantagem disso é
que, uma vez feito o fork, é possível modificar o código (corrigindo bugs, por
exemplo), então, caso sejam alterações úteis para outros desenvolvedores,
enviá-las para o projeto original, fazendo um pull request, que será explicado
mais adiante. A Figura 5 mostra o status de forks realizados no projeto Brook,
onde alguns deles já enviaram alterações para o código original:
Figura 5 - Status de forks da Brook
ABRINDO UM PULL REQUEST
Através de um pull request, é possível fazer a solicitação de integração
das alterações feitas em um fork para o projeto original. O link a seguir mostra
uma correção aplicada na Brook por meio de um pull request:
https://github.com/silvioprog/brookframework/pull/25.
O pedido mostrado acima foi a correção de ortografia de algumas linhas
no arquivo README.txt. Pull requests podem ser feitos ao projeto através do link
abaixo:
https://github.com/silvioprog/brookframework/pulls.
FAZENDO UMA DOAÇÃO AO PROJETO
Projetos open source a exemplo da Brook sobrevivem de contribuições
em código ou doações em dinheiro. Portanto, àqueles interessados em realizar
uma doação em dinheiro, é possível fazê-la via PayPal, através do botão Donate,
no rodapé da home page do projeto, conforme ilustra a Figura 6:
Figura 6 - Botão Donate
9. 9Brook EaD – Desenvolvimento web com Brook framework 3.0
A página não especifica valores para doação, deste modo, é possível doar
qualquer quantia, sendo o dinheiro recebido investido diretamente no projeto.
PRÓXIMOS PASSOS
Neste artigo, dentre outras coisas, aprendemos a baixar e instalar a Brook.
No próximo artigo, entenderemos o funcionamento de uma aplicação Brook e
faremos o nosso primeiro Hello world. Logo em seguida, usaremos os métodos
Write e Render para escrever textos ou renderizar arquivos na tela. Após esses
primeiros exemplos práticos, você entenderá que, sem um framework completo
como a Brook, a vida do programador web com Pascal seria bastante difícil.
REFERÊNCIAS
[1] ApacheBench & HTTPerf. G-WAN. Disponível em jun. 2014 em:
http://gwan.com/en_apachebench_httperf.html.
[2] Contribuindo em projetos open source com o Github. Tableless. Disponível em jun.
2014 em:
http://tableless.com.br/contribuindo-em-projetos-open-source-com-o-github.
[3] Padrões de projeto: O modelo MVC - Model View Controller. Macoratti. Disponível
em jun. 2014 em:
http://www.macoratti.net/vbn_mvc.htm.
10. 10Brook EaD – Desenvolvimento web com Brook framework 3.0
APÊNDICES
11. 11Brook EaD – Desenvolvimento web com Brook framework 3.0
APÊNDICE A – Relatório de estatísticas do ApacheBench para um teste
realizado com uma aplicação FCLWeb/CGI:
$ ab -n 90000 -c 90 -t 1 -k "http://localhost/cgi-bin/project1.cgi"
This is ApacheBench, Version 2.3 <$Revision: 1430300 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/
Benchmarking localhost (be patient)
Finished 1317 requests
Server Software: Apache/2.4.6
Server Hostname: localhost
Server Port: 80
Document Path: /cgi-bin/project1.cgi
Document Length: 11 bytes
Concurrency Level: 90
Time taken for tests: 1.001 seconds
Complete requests: 1317
Failed requests: 0
Write errors: 0
Keep-Alive requests: 1307
Total transferred: 260333 bytes
HTML transferred: 14487 bytes
Requests per second: 1315.63 [#/sec] (mean)
Time per request: 68.408 [ms] (mean)
Time per request: 0.760 [ms] (mean, across all concurrent requests)
Transfer rate: 253.97 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 0 0.6 0 6
Processing: 1 10 62.3 2 923
Waiting: 1 10 62.3 2 923
Total: 1 10 62.8 2 929
Percentage of the requests served within a certain time (ms)
50% 2
66% 2
75% 3
80% 3
90% 3
95% 49
98% 50
99% 51
100% 929 (longest request)
Código 3 - ApacheBench: FCLWeb/CGI
12. 12Brook EaD – Desenvolvimento web com Brook framework 3.0
APÊNDICE B – Relatório de estatísticas do ApacheBench para um teste
realizado com uma aplicação Brook/CGI:
$ ab -n 90000 -c 90 -t 1 -k "http://localhost/cgi-bin/cgi1.bf"
This is ApacheBench, Version 2.3 <$Revision: 1430300 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/
Benchmarking localhost (be patient)
Finished 1303 requests
Server Software: Apache/2.4.6
Server Hostname: localhost
Server Port: 80
Document Path: /cgi-bin/cgi1.bf
Document Length: 11 bytes
Concurrency Level: 90
Time taken for tests: 1.001 seconds
Complete requests: 1303
Failed requests: 0
Write errors: 0
Keep-Alive requests: 1293
Total transferred: 334442 bytes
HTML transferred: 14333 bytes
Requests per second: 1302.15 [#/sec] (mean)
Time per request: 69.116 [ms] (mean)
Time per request: 0.768 [ms] (mean, across all concurrent requests)
Transfer rate: 326.39 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 0 1.0 0 8
Processing: 1 15 75.1 3 977
Waiting: 1 15 75.1 3 977
Total: 1 15 75.8 3 986
Percentage of the requests served within a certain time (ms)
50% 3
66% 3
75% 4
80% 4
90% 49
95% 50
98% 52
99% 53
100% 986 (longest request)
Código 4 - ApacheBench: Brook/CGI
13. 13Brook EaD – Desenvolvimento web com Brook framework 3.0
APÊNDICE C – Relatório de estatísticas do ApacheBench para um teste
realizado com uma aplicação FCLWeb/FastCGI:
$ ab -n 90000 -c 90 -t 1 -k "http://localhost/cgi-bin/project1.fcgi"
This is ApacheBench, Version 2.3 <$Revision: 1430300 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/
Benchmarking localhost (be patient)
Completed 5000 requests
Finished 6832 requests
Server Software: Apache/2.4.6
Server Hostname: localhost
Server Port: 80
Document Path: /cgi-bin/project1.fcgi
Document Length: 11 bytes
Concurrency Level: 90
Time taken for tests: 1.000 seconds
Complete requests: 6832
Failed requests: 0
Write errors: 0
Keep-Alive requests: 6770
Total transferred: 1350019 bytes
HTML transferred: 75152 bytes
Requests per second: 6831.82 [#/sec] (mean)
Time per request: 13.174 [ms] (mean)
Time per request: 0.146 [ms] (mean, across all concurrent requests)
Transfer rate: 1318.34 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 0 0.7 0 8
Processing: 0 6 56.7 1 954
Waiting: 0 6 56.7 1 954
Total: 0 7 57.3 1 961
Percentage of the requests served within a certain time (ms)
50% 1
66% 2
75% 2
80% 2
90% 3
95% 3
98% 4
99% 13
100% 961 (longest request)
Código 5 - ApacheBench: FCLWeb/FastCGI
14. 14Brook EaD – Desenvolvimento web com Brook framework 3.0
APÊNDICE D – Relatório de estatísticas do ApacheBench para um teste
realizado com uma aplicação Brook/FastCGI:
$ ab -n 90000 -c 90 -t 1 -k "http://localhost/cgi-bin/cgi1.fbf"
This is ApacheBench, Version 2.3 <$Revision: 1430300 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/
Benchmarking localhost (be patient)
Completed 5000 requests
Finished 6866 requests
Server Software: Apache/2.4.6
Server Hostname: localhost
Server Port: 80
Document Path: /cgi-bin/cgi1.fbf
Document Length: 11 bytes
Concurrency Level: 90
Time taken for tests: 1.000 seconds
Complete requests: 6866
Failed requests: 0
Write errors: 0
Keep-Alive requests: 6803
Total transferred: 1761801 bytes
HTML transferred: 75526 bytes
Requests per second: 6865.67 [#/sec] (mean)
Time per request: 13.109 [ms] (mean)
Time per request: 0.146 [ms] (mean, across all concurrent requests)
Transfer rate: 1720.43 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 0 0.7 0 7
Processing: 0 7 57.9 1 954
Waiting: 0 7 57.9 1 954
Total: 0 7 58.5 1 961
Percentage of the requests served within a certain time (ms)
50% 1
66% 2
75% 2
80% 2
90% 3
95% 3
98% 4
99% 12
100% 961 (longest request)
Código 6 - ApacheBench: Brook/FastCGI