• Nenhum resultado encontrado

DESENVOLVIMENTO WEB COM BROOK FRAMEWORK 3.0

N/A
N/A
Protected

Academic year: 2021

Share "DESENVOLVIMENTO WEB COM BROOK FRAMEWORK 3.0"

Copied!
14
0
0

Texto

(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)

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)

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 noAPÊ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.

(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:

(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:

(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:

(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

(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:

(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:

(10)
(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)

(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)

(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)

(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)

Referências

Documentos relacionados

 De acordo com a Súmula 416 do STJ, caso haja a perda da qualidade de segurado à época do óbito, mesmo assim, será devida a pensão por morte ao dependentes, desde que o

Constituído como uma entidade sem fins lucrativos, o InternetLab atua como ponto de articulação entre acadêmicos e representantes dos setores público, privado e da sociedade

gerenciamento do valor criado pela plataforma, o que depende do balanceamento das curvas de oferta (fornecedores) e curvas de demanda (consumidores). Conjugação das economias

RODOLFO – Júlia, dizer quando eu não saberia porque acredito que sempre fui apaixonado por você?. Não tenho receio de dizer que você sempre foi a mulher da

(Uma casa vazia, as paredes com um papel de parede importado, muito clássico e caro, mostrando toda a opulência do local a anos atrás, atualmente a velhice do papel

9.2 Promover a industrialização inclusiva e sustentável e, até 2030, aumentar significativamente a participação da indústria no setor de emprego e no PIB, de

thread corrente em estado de espera até que outra thread chame os métodos notify ou notifyAll liberando o

A implementação da pesquisa como prática de formação é difícil, mais pela concepção restrita dada à pesquisa pelas “comunidades científicas” do que pela