Você está na página 1de 14

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
Brook EaD – Desenvolvimento web com Brook framework 3.0 2

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
Brook EaD – Desenvolvimento web com Brook framework 3.0 3

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.
Brook EaD – Desenvolvimento web com Brook framework 3.0 4

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.
Brook EaD – Desenvolvimento web com Brook framework 3.0 5

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:\repository\framework\brookframework-3.0.0, e, logo em seguida,
realizar os seguintes passos:

1. Abrir o arquivo C:\repository\framework\brookframework-3.0.0\packages\


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


Brook EaD – Desenvolvimento web com Brook framework 3.0 6

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


Brook EaD – Desenvolvimento web com Brook framework 3.0 7

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.
Brook EaD – Desenvolvimento web com Brook framework 3.0 8

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


Brook EaD – Desenvolvimento web com Brook framework 3.0 9

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. Acessado em jun. 2014. Disponível em:
http://gwan.com/en_apachebench_httperf.html.

[2] Contribuindo em projetos open source com o Github. Tableless. Acessado em jun.
2014. Disponível 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. Acessado
em jun. 2014. Disponível em:
http://www.macoratti.net/vbn_mvc.htm.
Brook EaD – Desenvolvimento web com Brook framework 3.0 10

APÊNDICES
Brook EaD – Desenvolvimento web com Brook framework 3.0 11

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
Brook EaD – Desenvolvimento web com Brook framework 3.0 12

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
Brook EaD – Desenvolvimento web com Brook framework 3.0 13

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
Brook EaD – Desenvolvimento web com Brook framework 3.0 14

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

Você também pode gostar