desenvolvimento web com brook framework 3.0 - 01 - apresentaÇÃo; instalaÇÃo; sugestÃo de...

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

Upload: silvio-clecio

Post on 04-Jul-2015

674 views

Category:

Internet


8 download

TRANSCRIPT

Page 1: Desenvolvimento web com Brook framework 3.0 - 01 - APRESENTAÇÃO; INSTALAÇÃO; SUGESTÃO DE IDEIAS; FORK; PULL REQUESTS; DOAÇÕES

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

Page 2: Desenvolvimento web com Brook framework 3.0 - 01 - APRESENTAÇÃO; INSTALAÇÃO; SUGESTÃO DE IDEIAS; FORK; PULL REQUESTS; DOAÇÕES

2 Brook 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

Page 3: Desenvolvimento web com Brook framework 3.0 - 01 - APRESENTAÇÃO; INSTALAÇÃO; SUGESTÃO DE IDEIAS; FORK; PULL REQUESTS; DOAÇÕES

3 Brook 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.

Page 4: Desenvolvimento web com Brook framework 3.0 - 01 - APRESENTAÇÃO; INSTALAÇÃO; SUGESTÃO DE IDEIAS; FORK; PULL REQUESTS; DOAÇÕES

4 Brook 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.

Page 5: Desenvolvimento web com Brook framework 3.0 - 01 - APRESENTAÇÃO; INSTALAÇÃO; SUGESTÃO DE IDEIAS; FORK; PULL REQUESTS; DOAÇÕES

5 Brook 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:\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

Page 6: Desenvolvimento web com Brook framework 3.0 - 01 - APRESENTAÇÃO; INSTALAÇÃO; SUGESTÃO DE IDEIAS; FORK; PULL REQUESTS; DOAÇÕES

6 Brook 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

Page 7: Desenvolvimento web com Brook framework 3.0 - 01 - APRESENTAÇÃO; INSTALAÇÃO; SUGESTÃO DE IDEIAS; FORK; PULL REQUESTS; DOAÇÕES

7 Brook 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.

Page 8: Desenvolvimento web com Brook framework 3.0 - 01 - APRESENTAÇÃO; INSTALAÇÃO; SUGESTÃO DE IDEIAS; FORK; PULL REQUESTS; DOAÇÕES

8 Brook 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

Page 9: Desenvolvimento web com Brook framework 3.0 - 01 - APRESENTAÇÃO; INSTALAÇÃO; SUGESTÃO DE IDEIAS; FORK; PULL REQUESTS; DOAÇÕES

9 Brook 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.

Page 10: Desenvolvimento web com Brook framework 3.0 - 01 - APRESENTAÇÃO; INSTALAÇÃO; SUGESTÃO DE IDEIAS; FORK; PULL REQUESTS; DOAÇÕES

10 Brook EaD – Desenvolvimento web com Brook framework 3.0

APÊNDICES

Page 11: Desenvolvimento web com Brook framework 3.0 - 01 - APRESENTAÇÃO; INSTALAÇÃO; SUGESTÃO DE IDEIAS; FORK; PULL REQUESTS; DOAÇÕES

11 Brook 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

Page 12: Desenvolvimento web com Brook framework 3.0 - 01 - APRESENTAÇÃO; INSTALAÇÃO; SUGESTÃO DE IDEIAS; FORK; PULL REQUESTS; DOAÇÕES

12 Brook 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

Page 13: Desenvolvimento web com Brook framework 3.0 - 01 - APRESENTAÇÃO; INSTALAÇÃO; SUGESTÃO DE IDEIAS; FORK; PULL REQUESTS; DOAÇÕES

13 Brook 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

Page 14: Desenvolvimento web com Brook framework 3.0 - 01 - APRESENTAÇÃO; INSTALAÇÃO; SUGESTÃO DE IDEIAS; FORK; PULL REQUESTS; DOAÇÕES

14 Brook 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