segunda-feira, 4 de novembro de 2013

Quanto você Quer, o Universo conspira em seu favor - Parte 5


Depois da ascensão e apogeu, só poderia vir a queda.

Após a adaptação comecei a levar a mesma vida do segundo ano. Como havia prometido ao fim da adaptação, eu já tinha tirado o “recalque” com os calouros e não queria saber de problemas.

Apesar disso, muita gente da minha turma acabou sendo expulsa no início do ano por conta dos trotes, como foi o caso do Alfenas e do meu comesa do primeiro primeiro, Vigné.

O Calcinha vinha ditando a nova voga e pelos colegas ficávamos sabendo das histórias de assédio moral. O curioso era que ele resolvia implicar com pessoas que eram relativamente tranquilas. Um dele era o Ricca. Ele nos contou que foi chamado para conversar com o COMCA e ele contou a história dos exército das comcubinas. Em resumo, para conseguir educar um exército de comcubinas, o general cortava a cabeça de uma para ganhar o “respeito” e obediência das outras. Enfim, o cidadão lê “A Arte da Guerra” e acha o máximo pagar mistério para subordinado. Mas enfim, uma característica do sistema que percebi cedo foi que ele premia e promove os que assim agem.

Outro que recebia uma atenção especial era o Teixiera Gama (Rodrigo). Por alguma razão obscura, o Calcinha não o suportava. Ele havia prometido que enquanto ele fosse COMCA, ele não ser formaria. O Rodrigo era um cara tranquilo, a única coisa que você podia falar dele era sua apresentação, não tinha saco para se manter alinhado. Mas como ele havia vários outros, até piores, então porque a preferência? O que descobrimos depois é que o irmão do Teixeira era da turma do Calcinha e eles não se davam. Parecia que o Luiz Antônio estava descontando algum recalque.

Os alunos viviam sendo chamados por ele para prestar esclarecimentos. Em um deles, eu fui chamado. Entro na sala, estava o COMCA e um oficial do quadro auxiliar que não gostava de mim. Foi convidado a sentar e vem a primeira pergunta: “Renzo, sobre trote, o que você tem a dizer?”. Como disse, depois da adaptação eu estava muito sossegado. Mas depois da pergunta, lembrei da adaptação e do episódio com o Biro Biro. Mesmo assim respondi: “Não tenho nada a dizer, senhor”. Aí ele falou para o oficial: “Coloque aí que ele não tinha nada a declarar”. Mas felizmente, o tom da conversa foi suave. Ele havia recebido denúncia de trote e como eu era o responsável pelo alojamento do primeiro ano, ele queria saber se eu tinha ouvido algo sobre a ssunto. Mesmo que eu soubesse, dedo duro nunca fui. Mas era sempre assim as conversas, sempre jogando verde.

Nessa época as mães dos alunos do primeiro ano criaram uma associação: “Associação de Mães contra o Trote”. Elas viviam fazendo denúncias. E quando as faziam, os oficiais perguntavam quem seriam os autores. E muitas vezes meu nome vinha à tona, mesmo eu não fazendo nada, somente por conta de eu ser o responsável do alojamento do primeiro ano. Em uma dessas eu fui chamado pelo Tenente Anselmo para prestar esclarecimentos. Ele falou que uma mãe tinha ligado e falado que eu tinha dado trote no filho dela na terça-feira de madrugada daquela semana. Refiz os meus passos e descobri que no dia eu tinha me machucado no futebol e dormi na enfermaria, com toda a equipe médica de testemunha lá. Enfim, tirando a adaptação, minha consciência estava muito tranquila.

No meio daquele ano, fomos em um churrasco na casa do Tenente Carlos Alexandre, que era responsável pela equipe de futebol. Eu tinha começado a beber no segundo ano e tomei umas cervejas naquele churrasco. Quando retornei ao alojamento, quem estava de serviço era o aluno Anderson, conhecido pelo apelido de Gazela. Ele era famoso por ser meio rebarbado. Aquela era uma quinta-feira e eu estava arrumando minhas coisas para ir embora. Mandei o Anderson ir buscar uma bolsa azul minha, ele acabou trazendo uma maleta. Eu falei “Eu mandei você trazer uma bolsa azul e não uma maleta preta”. 

Ser truculento não era uma característica minha, pelo contrário, eu era parceiro da molecada. Mas o Anderson tirava todo mundo do sério. Acho que ele respondeu alguma coisa que não me lembro e eu considerei que tinha sido rebarbado. Estando meio alto por conta da cerveja, dei um empurrão nele e mandei trazer a bolsa certa. Continuei arrumando minhas coisas.

Então escutei uns barulhos no corredor do alojamento. O aluno que estava de serviço no banheiro estava segurando o Anderson, pedindo para não fazer aquilo. Fui ver o que estava acontecendo e o Anderson estava indo me denunciar ao Oficial-de-Dia. Analisando hoje, ele fez a coisa certa. Mas no Naval daquela época, o que ele estava fazendo era chamado de “spyar”, o que o tornaria um "spy" e sua vida não seria fácil. Eu perguntei se ele realmente queria fazer isso, ele disse que sim. Eu falei para ele fazer então, mas eu era arrogante ao ponto de achar que ele desistiria no meio da caminho.

Dez minutos depois sou chamado pelo Oficial-de-Dia Tenente Anselmo que me pergunta se eu tinha dado um soco no aluno. Respondi que não, que tinha dado um empurrão. Ele falou que não fazia diferença e me mandou ir dormir no alojamento da minha turma naquele dia.

As consequências do ocorrido todo mundo sabia: eu levaria uma parte e seria punido 10 dias de prisão rigorosa após audiência com o Comandante do CN. Por outro lado, a vida do Anderson também deve ter ficado ruim. Como eu tinha ficado parceiro de vários primeiro anistas, alguns deles me confessaram que durante algum tempo eles estavam dando “reunir” durante a madrugada. Reunir consistia em juntar um grupo de alunos. Eles levavam um cobertor, cada um segurava em uma ponta e enquanto o jovem estavam dormindo, o usavam para prendendê-lo na cama enquanto os outro batiam. Eu falei para eles pararem com aquilo, não por que eu achasse isso incorreto na época, mas porque aquilo poderia me prejudicar ainda mais.

Enfim, levei a parte e fui para a audiência com o Comandante Guilherme. Na audiência, ele me falou que meu nome era levantado constantemente em denúncias de trote. Eu disse a verdade, que todas eram falsas e contei o caso de quando fui interrogado pelo Tenente Anselmo. Mas enfim, no oficialato ninguém mais me conhecia como antes, como na época do Tenente Alexandre e Comandante Cardoso Gomes. Como todo já esperavam, levei 10 “rigs”.

E da mesmas maneira que o Universo conspira em seu favor quando você Quer, ele começa a conspira contra quando a auto-confiança se confunde com arrogância. Certo dia eu tinha estava com alergia e tomei o xarope Polaramine. O médico tinha me falado que ele dava muito sono, então coloquei meu nome para que o ronda me acordasse. Ele não me acordou e eu levei 3 detenções por conta disso.

No dia seguinte, mesmas coisa, esqueceu de me acordar. Só que dessa vez eu acordei com o Imediato do Corpo de Alunos acendendo as luzes do alojamento. Eu já estava tão desesperado para não tomar parte que fui para a janela do alojamento. Mesmo sendo o primeiro andar, até o chão deveria ter uns 5 metros de altura. Segurei no cabo do para-raio e desci por ele, indo me esconder na subida da caixa de água.

Naquele tempo estavam acontecendo muitos roubos no alojamento e o Melo não estava encontrando seu ferro de passar. Como a situação já estava ficando insuportável, ele foi falar com os oficiais na sexta-feira, na hora da formatura para liberaração. Todo mundo ficou muito puto com ele, porque isso atrasaria a ida para a casa. Então resolveram revistar as malas dos alunos e em vez de encontrarem ferro, encontraram um monte de carteiras de Marinha com os alunos do primeiro ano. Por fim, o Melo descobriu que tinha colocado o ferro em outro lugar e o pessoal ficou desarrumando a cama dele por umas duas semanas por conta do ocorrido.

Mas as carteiras chamaram atenção e começaram a interrogar os calouros para saber o que estava ocorrendo. Chegaram então à fonte, o Sérgio. Eu e ele fomos os únicos a passarmos no Colégio em Santos no ano de 99, sendo que eu já o conhecia antes, quando fizemos Kick Boxing no Sírio Libanes, clube da cidade. Então o Calcinha empregou sua técnica de coerção, falou para o Sérgio dedurar quem mais estava fazendo comércio a bordo e, caso contrário, a punição dele seria bem pior, possivelmente expulsão.

Então o Sérgio entregou todo mundo envolvido em comércio, desde a adaptação. Na segunda-feira logo começaram a chamar todo mundo envolvido. Como eu disse no post anterior, como era de praxe, eu tinha vendido camisas durante a adaptação e estava esperando a hora de eu ser chamado. Isso seria muito ruim para mim, pois com 10 rigs nas costa, eu não ficaria de conselho no fim do ano. Agora se eu levasse mais 10, a coisa ficaria complicada.

Mas o fato é que ninguém me chamou, depois eu soube que o Sérgio denunciou todo mundo, menos a mim. Mas de toda forma, muita gente tinha sido chamada e eu achava que possivelmente chegariam a mim. Nesse dilema, conversei com o Caldas e depois também lembrei do que minha mãe sempre dizia: “Quem conta a verdade merece perdão”. Então decidi procurar o Tenente Serafim e contar a ele, deixando a decisão sobre o que fazer em suas mãos, na qualidade de único oficial que eu considerava ser integro e justo. Ele estava de serviço e eu contei a ele que tinha vendido camisas. Ele se mostrou decepcionado e falou pra eu me apresentar ao COMCA.

Todo mundo envolvido com comércio estava lá. Ao me ver, o Calcinha perguntou o que eu estava fazendo lá. Eu disse que estava me apresentando por também estar envolvido. Ele mandou eu esperar no corredor com os demais que ainda seriam interrogados.

Entramos na sala um a um e contamos o que fizemos. No meu caso, vendi camisas durante a adaptação. Contudo, o COMCA estava também interessado em saber se tínhamos obrigado os alunos a comprar. Falamos que o comércio sempre ocorreu, mas nunca foi obrigatório, ou seja, contamos a verdade.

Na semana que se seguiu alunos do primeiro ano começaram a ser ouvidos. Reparando que o COMCA estava começando a procurar pêlo em ovo, peguei um exemplar do Regimendo Interno do CN para saber até onde ele poderia ir. Descobri nele que dado um certo acontecimento, você poderia tomar apenas uma parte por ele. No mais, as demais condições deveriam ser lançadas como agravantes ou atenuantes. O lado bom disso é que a penalidade máxima por uma parte seriam 10 dias de prisão rigorosa.

Mas é óbvio que o Calcinha sabia disso também e fez sua cama de gato: me deu 3 partes. Uma por comércio a bordo, outra dizendo que eu tinha brigado os alunos a comprarem e outra que eu nem lembro a razão. Mas aí vem a auto confiança do cara que tinha conseguido tudo até então. Ponderei com ele que aquilo não estava correto, que deveria tomar parte somente por comércio e ele deveria lançar as outras duas como agravantes. Além disso, falei que era para ele lançar o fato de eu ter me apresentado voluntariamente como fator atenuante.

Se eu pudesse voltar na tempo, eu daria um tapa em mim mesmo para dizer: “Acorda Zé Mané”. Um aluno contestando um Capitão de Corveta? Só sendo muito inocente mesmo para pensar que disso poderia sair algo positivo. Mas eu acreditava em justiça, que por mais boçal que um oficial pudesse ser, ele não poderia ir contra às regras. Ledo engano. Obviamente que ele simplesmente cagou na minha cabeça. Me mandou para audiência com o Comandante do Colégio com 3 partes nas costas.

Então eu poderia levar até 30 dias de prisão rigorosa, 10 por cada parte, e isso seria um problema. Acabei levando 13 e assim eu me tornava o recordista de prisões até então com 23, somando as 10 que já tinha levado por conta do ocorrido com o Anderson. Só fui superado já no fim do ano, quando o Rodolfo conseguiu somar 24 rigs.

Comecei então a cumprir a pena. Mas durante ela ocorreria o nosso baile de integração. Era praxe nos anos anteriores os alunos terem a pena suspensa para comparecerem ao evento. Mas não sob a administração do Calcinha. Ao conversarmos com ele, não fomos liberados e, mais do que isso, ele nos falou que a culpa de não irmos era nossa por estarmos no lance.

Mas eu não ia desistir fácil, como disse, a arrogância era muito grande. Me dirigi então ao Serviço de Orientação Educacional (SOE) e conversei com psicóloga Patrícia Pontes. Ela intercedeu junto ao COMCA, mas não obteve sucesso. Apenas como parêntesis, parece que depois os dois tiveram algum envolvimento amoroso. Mas voltando ao assunto, me lembro que o Giacomo também estava preso e sua mãe era advogada. Tentei juntar todos o presos para entrarmos com uma liminar na justiça para irmos ao baile. Os mais espertos falaram que não iam querer entrar nessa, mas mesmo assim eu segui em frente.

A mãe do Giacomo entrou em contato com o Calcinha, mas rapidamente retornou dizendo que era melhor ficarmos quietinhos, que o COMCA era um maníaco. Enfim, perdermos o baile que era um dos melhores eventos do CN. Naquele ano, ele ocorreu na Marina da Glória.

Depois de uma semana de punição, chegou a época da NAE. Depois do ocorrido com o baile, eu sinceramente não queria ir. Isso porque para a competição suspenderiam nossa punição. Achei isso uma tremenda hipocrisia: para o baile não fomos liberado, mas para uma competição esportiva sim. Mas nessa situação, achei melhor participar. Seria uma chance de ganhar alguns pontos de conceito, além de eu adorar jogar bola.

Mas quando a coisa começa a desandar, não tem jeito. No jogo contra a EPCAR, no primeiro lance que recebi uma bola, um meia adversário me acertou uma porrada. Não contente, disse que ia me bater o jogo inteiro. Como bom baixinho folgado, eu falei que duvidava e quando fui marcar ele, pisei no seu calcanhar. Ele ficou muito puto. No próximo lance que recebi a bola ele veio babando. Mas quando eu dei o drible, ele meteu a mão na minha cara. Eu cai e fiquei no chão até ele receber o vermelho. Eu ia continuar deitado, mas o restante do time dele começou a querer me chutar no chão. Recebi cartão amarelo. Enfim, pelo menos um eu expulsei.

Mas então logo depois houve um lance mais ríspido com outro jogador e eu também fui expulso. O Fofão disse que tinha se arrependido em não ter me substituído. Logo no finzinho saiu uma falta pra eles no entrada da área, que foi convertido em gol e logo depois o jogo terminou. O Comandante do CN foi convidado a dar as medalhas e nos cumprimentar. Quando passou por mim, disse que eu tinha que aprender a não perder a cabeça. Ele estava certo. Em vez de eu ganhar pontos de conceito na NAE, acabei perdendo mais ainda.

Voltamos ao CN e continuamos cumprir nossas penas. Uma das coisas que tínhamos que fazer no fim de semana era nos apresentarmos para o café às 8 da manhã. Eu já estava totalmente na merda, então quando era 7:45 eu já estava lá. Teve um dia que o Tenente Fuzileiro Lincolm era quem estava de Oficial-de-Dia, mas ele não veio às 8 horas. Presumo eu hoje que o serviço era coçado e os oficiais davam uma acochambrada, porque era comum eles cagarem o pau assim. Eu tinha pego um livro do Rodrigo, Senhor dos Anéis Completo, para passar o tempo e fiquei lendo lá em baixo até 9 horas, esperando o toque para os presos. Depois de uma hora de espera, chegamos à conclusão que, como muita ocorria, ele não viria mais.

Tomei café, fui para o alojamento e fiquei lendo em uma cama no fim do alojamento, por conta da claridade. Então umas 10:30 ele tocou o sinal para os presos. Mas quando urubu está de azar, o de baixo caga no de cima. Eu não ouvi o sinal e como estava no fim do alojamento, nenhum colega me viu para poder avisar. Quando deu a hora do almoço me avisaram que o Lincoln queria falar comigo. Expliquei a ele ocorrido. Disse que estava lá no horário padrão e ele não, depois fiquei lendo e não ouvi o toque. Ele respondeu “Não interessa, na hora que o sinal toca que você tem que vir”. Cara, eu queria explodir e mandar ele tomar no cu. Mas eu já estava tão anestesiado com as merdas que estavam acontecendo, que disse “Sim senhor, o senhor está certo, a culpa é minha e eu mereço a parte”. Acho que ele ficou com pena e não me deu aquela parte de ocorrência, mas infelizmente na época eu não entendi que essa deveria ser a postura em um ambiente hierárquico como o quartel ou uma empresa. Ou seja, se o seu superior está sendo um babaca, você tem que reconhecer que você está errado e ainda o agradecer por isso. Mas eu ainda precisava levar mais umas cacetadas para aprender isso.

Chegou nosso conceito no fim do ano e o meu foi 1,5 em 10. Isso significava que eu iria para o Conselho de Ensino, onde decidiriam se eu continuaria ou não na Marinha. Todos os anos ele ocorria no fim do ano letivo. Mas não naquele, não esqueça do nosso maquiavélico COMCA Calcinha. Ele marcou o conselho para dia 18 de dezembro, seria feito inclusive depois da nossa cerimônia de formatura, feita na Escola Naval e depois do baile também.

Durante esse baile de formatura, que acho que foi por volta de 15 de dezembro, quando eu conversava com amigos, eu dizia que não sabia se iria para EN por conta do Conselho. Mas todo mundo me tranquilizava, dizendo que eu ia sim, que eu era um cara na marca, que só tinha dado uns vacilos no terceiro ano. Para ser sincero, a minha auto confiança era grande e eu também não tinha dúvidas que iria para a EN. Diferente de muitos, aquilo era o que eu queria para minha vida. Só que a distância entre auto confiança e arrogância é muito pequena.

Minha mãe se ofereceu para ir para Angra comigo para me apoiar. Eu respondi que não precisava, que tudo ia ocorrer bem, eu tinha certeza. Na primeira parte do conselho, nós contávamos nossas vidas para os oficiais do corpo de alunos: COMCA, seu imediato e aos oficiais comandantes de companhia. Assim eu fiz e me lembro de eu dizer mais do que deveria, principalmente com relação ao eu ter pedido à mãe do Giacomo para interceder no caso do Baile. Tudo isso por conta dos verdes que o Senhor Luiz Antônio jogava.

Depois disso, com todos os depoimentos, todos os casos seriam levados pelo COMCA para apreciação de todos oficiais do CN: Comandante, Imediato, Oficial Médico (Oscar Passos), SOE e os demais oficiais da primeira fase. O problema disso era não ter direito a defesa, sendo COMCA a pessoa a fazer o papel de advogado de defesa. Era óbvio que isso só poderia dar merda, realmente eu era muito inocente.

Depois de 4 horas angustiantes, vem o resultado proferido pelo COMCA de forma objetiva (Só não lembro todos os nomes do que safaram): “Alan Viana, Brito e Rodolfo vão para Escola Naval. Os demais, me acompanhem para assinar seus documentos de saída da Marinha”. Cara, meu mundo ruiu naquele momento. Foi uma mistura de sentimento: ódio contra o COMCA acompanhado da vontade de sentar a porrada ou, melhor ainda, um tiro entre os olhos; desespero de não saber o que seria da minha vida e evoluindo até o delírio de imaginar que aquilo era só uma brincadeira e que ele deveria reler a lista, pois meu nome deveria estar lá.

Liguei para casa, avisei minha mãe: “Acabaram de me mandar embora da Marinha”. Meu velho, dizer isso pra ela foi o pior de tudo. A vergonha que eu senti naquele momento foi indescritível. Me senti um merda e ficamos em silêncio no telefone por cerca de 1 minuto. Falei então que ia desligar, ver o que teria que fazer e voltaria para a casa.

Ao chegar na sala do COMCA o Calcinha queria que assinássemos os documentos. O Máximo liderou a revolta, dizendo que não ia assinar pois assim tinha sido instruído por seu advogado. O Calcinha ficou possesso, falou que não interessava porque mesmo não assinando, havia testemunhas, então daria na mesma. O Máximo replicou dizendo que se não tinha diferença, então ele não precisava insistir na assinatura.

Ninguém assinou e arrumamos nossas coisas para retornarmos para casa. Olhando na época e hoje também, a maioria que não foi permitida a ir para EN tinha cometido seu pecados, inclusive eu. Mas sinceramente, duas entraram totalmente de gaiatos: o Rodrigo e o Coxinha. O Caso do Rodrigo eu já comentei. O do Coxinha, seu grande pecado foi não conseguir passar na aptidão física. Só o que ele pediu foi para darem a ele o diploma do segundo grau, nem queria ir para EN. Mas enfim, era o Calcinha quem decidia, então nem preciso dizer qual foi a resposta.

Na viagem, não sei como não bati o carro. Eu ficava pensando em como seria entrar em casa, toda a vergonha na frente da minha mãe e o esculacho que ia levar. Mas minha mãe foi do caralho. Quando cheguei ela só me confortou. No meio tempo, ela contou para o Bruno, aluno da Epcar que eu tinha conhecido 2 anos antes em viagem para Porto Seguro. Ele disse que a tia era advogada e poderia interceder em nosso favor. Enfim, a luta ganharia mais alguns rounds.

Hoje em dia, cheguei em algumas conclusões sobre o ocorrido:

1) Anderson: você era um dos caras mais sãos naquele sistema que gerava uma total inversão de valores. Quando conversamos durante um baile na EN você veio me pedir desculpas. Eu disse que eu que tinha que me desculpar e isso não era demagogia nenhuma, era realmente o que eu pensava e penso.

2) Calcinha: já o agradeci pessoalmente pelo episódio e depois chego nessa parte história. Mas aproveito para agradecer de novo. Não fosse você, eu não teria aprendido a lidar com pessoas, independente de o quão boçais elas sejam, principalmente quando elas tem poder e autoridade sobre você.

Sobre ser expulso, eu penso de duas maneira:

1) No fim eu tive o que merecia por tudo o que fiz durante a adaptação e pela arrogância de não abaixar a crista mesmo quando estava claro que eu ia me ferrar. Nunca eu deveria ter tratado um subordinado como tratei o Anderson.
2) Por outro lado, levando apenas em conta as razões de eu ter sido julgado: empurrar um aluno e vender camisas, chego à conclusão que aquilo foi uma injustiça. Isso seria coisa normal para um jovem de 19 anos e eu era inocente de acreditar que no mundo havia justiça, que as coisas deveria ser feitas da maneira correta pelas autoridade e que todos seriam julgados pela sua competência e seus atos. Me julgaram apenas pelos meus pecados no terceiro ano e não consideraram o trabalho duro que tinha feito nos dois primeiros, quando eu tinha uma ficha disciplinar ilibada.

Mas mais importante que tudo isso, hoje para mim não interessa se foi ou não injustiça, águas passadas não movem moinho e eu aprendi a só extrair bons ensinamentos de tudo que ocorreu.

A continuação dessa história fica para outro post. Por enquanto, coloco algumas fotos do CN da época de terceiro ano.

Abs,
Renzo Nuccitelli










Eu e o Biro Biro.


























sexta-feira, 1 de novembro de 2013

Instalando servidor Jenkins caseiro

Estou escrevendo esse post para ficar de tutorial para mim mesmo no futuro =D.

Como toda receita, vamos aos ingredientes:

  • Computador, pode ser aquela torre velha que não servia para nada
  • Internet
  • Ubuntu 12.04
  • No-Ip

Modo de preparo

1) Instalando o Jenkins

No Ubuntu, o Jenkins já possui pacote padrão. Portanto, basta rodar o comando

sudo apt-get install jenkins

Inclusive meu amigo Dênis Costa fez uns scripts bacana para já instalar alguns tipos de ambientes:


Se a instalação ocorrer com sucesso, ela criará um daemon que vai rodar sempre que o computador for ligado. Você pode conferir se rodando acessando no seu navegador:


Essa instalação cria um usuário chamado “jenkins” para rodar o serviço, e a home dele se encontra em:

/var/lib/jenkins

Como essa pasta pertence ao usuário jenkins, toda vez que você for alterar, deverá executar as operações como usuário jenkins ou como super usuário.

A instalação via pacote é mais fácil mas, em geral, não contém a última versão estável. Inclusive na página "Manage Jenkins" ele coloca a mensagem de atualização:



Então se você está fazendo uma instalação nova, aproveite para já atualizar. Visite a página do projeto (http://jenkins-ci.org/) e baixe o arquivo jenkins.war:


Após o donwload, pare o serviço do jenkins:

sudo service jenkins stop

Substitua o jenkins.war na pasta:

/usr/share/jenkins/jenkins.war

Reinicie o serviço:

sudo service jenkins start

Acesse novamente localhost:8080. Depois navegue para Manage Jenkins → Configure System. Quando instalei, a atualização era um patch de segurança e por conta disso era necessário atualizar alguns arquivos. Nessa página (Manage Jenkins), existe logo em cima um aviso pedindo para você clicar para ele sobrescrever esses arquivos. Clique no botão para sobrescrever. Feita a atualização, ele pedirá para você conferir o log de atualização (ele mostra um link indicando isso) e se tudo estiver ok, você pode clicar no botão “Dismiss message” para que a mensagem não aparece mais.

1.1 Segurança

Como a ideia é expor o serviço na web, precisamos de um mínimo de segurança. O jeito mais fácil de controlar quem pode acessar o sistema é utilizando o Open Id. Para isso você precisa instalar o plugin. Navegue para:

Manage Jenkins → Manage Plugins e clique na aba Available

Como existe muito plugin, no seu navegador use o Crtl + F e pesquise por openid. Dê um check nele:



Depois clique em “Download now and install after restart”. As vezes o processo de instalação não consegue restartar o jenkins com o plugin instalado. Se for o caso, a dica é rodar o comando para restartar na força bruta:

sudo service jenkins restart

Se a instalação ocorreu com sucesso, você deve navegar para:

Mange Jenkins → Configura Global Security:



Dê um check em “Enable security” e na parte de "Access Control". Selecione a opção "OpenID SSO", colocando o link do Google. Na parte "Authorization", escolha o "Matrix-based security" e acrescente os emails dos usuários autorizados a acessar a aplicação, bem como seus respectivos poderes:


Clique em salvar.

A partir de agora somente usuários dessa matriz acessam o sistema utilizando sua conta Google como login.

Navegue até Mange Jenkins → Configure System. Nessa tela, escolha o seu domínio:



Obviamente que você precisa escolher um domínio que seja seu e que você tenha acesso ao DNS. Cabe notar também duas coisas:

  1. Escolhi o https por ser um protocolo bem mais seguro que http,
  2. Coloquei a porta 8080 e não a default (443). Fiz isso porque se você usa uma internet em casa, a Net bloqueia as portas padrão, por isso você tem que usar outra para poder acessar (Dica que me foi passada pelo Tony Lâmpada, que por sua vez a recebeu do Beraba).
Feito isso, clique em Salvar

1.1.1) Configuração https:

Acesse o arquivo /etc/default/jenkins. Na linha que começa com JENKINS_ARGS, edite para:

JENKINS_ARGS="--webroot=$JENKINS_RUN/war --httpPort=-1 --httpsPort=8080 --ajp13Port=$AJP_PORT –preferredClassLoader=java.net.URLClassLoader"

Em termos de Jenkins, a configuração enfim terminou.

2) Setup No-IP

Como você quer acessar o Jenkins por um nome, no nosso caso https://seu-dominio.com.br:8080 ,a forma grátis, utilizando a sua internet pessoal, é usar o serviço do site http://www.noip.com/. Cadastre-se. Entre no Hosts/Redirects (http://www.noip.com/members/dns/). Ele vai criar para você um domínio bacana na forma seu-usuario.no-ip.biz. Se você não tiver um dominio, você até poderá utilizar esse como padrão. Clique em modify:



Escolha a opção “DNS Host (A)”.

Como o seu ip na Net é dinâmico, você precisa instalar uma aplicação para avisar o no-ip quando ele muda. Para fazer isso, execute os seguintes comandos no terminal (usar sudo se der erro de permissão):

  • cd /usr/local/src/
  • wget http://www.no-ip.com/client/linux/noip-duc-linux.tar.gz
  • tar xf noip-duc-linux.tar.gz
  • cd noip-2.1.9-1/
  • make install

Ao final da instalação, o programa vai pedir o login e senha de sua conta que você acabou de cadastrar no site do no-ip.


3) Configurando o roteador

Se você utiliza um roteador para compartilhar sua internet, você precisa configurá-lo para dar acesso ao seu servidor. Se você usa um, pode pular esse passo.

Acesse seu roteador digitando no navagador 192.168.1.1. Você precisa saber a senha do roteador. O meu é um linksys e eu vou mostrar as telas dele. Se o seu for diferente, você pode procurar na internet como configurar o seu modelo.

A primeira coisa é que seu roteador deve estar atribuindo ip dinamicamente. Assim, ao seu servidor pode ser dado um ip diferente toda vez que for religado. Isso seria um problema, pois você teria toda vez que conferir o ip no roteador e reconfigurar. Alguns permitem a você atribuir um ip fixo para um computador na rede e foi isso que eu fiz. Acessei:


Cliquei em “DHCP Reservation”. Na tela que abriu, chequei o computador que eu queria e cliquei em add clients.





Assim, o ip não vai mais ser alterado pelo roteador. Em seguida, acessei a parte de redirecionamento de porta. Coloquei como porta externa a 8080 e também como porta interna. Coloquei o ip da máquina escolhida (192.168.1.103) e chequei coluna enabled . Depois salvei as configurações.

Para checar se funcionou, você pode usar o site www.canyouseeme.org. Basta escolher a porta (8080 no nosso caso) e clicar em checkport. Se aparecer a mensagem de Sucess em verde, tudo está ok.


4) Configurando seu domínio.

Nesse ponto, você já pode acessar seu Jenkins através da sua url do no-ip: https://seu-usuario.no-ip.biz:8080.

Mas gostaríamos de colocar o acesso através de nosso domínio. Sendo assim precisamos criar uma entrada CNAME no nosso provedor de dns.

Se você, assim como eu, usa o registro.br, acesso o site, clique em no domínio desejado e depois em Salvar e Editar DNS.

Na página em que abrir, clique em +Record, escolha um subdominio (jenkins no caso) e e escolha o tipo CNAME. Na parte dos dados coloquei o endereço do no-ip: seu-usuario.no-ip.biz.



Agora você pode acessar o jenkins através da url https://jenkins.seu-dominio.com.br:8080. Como estamos usando https e nosso servidor não tem certificado, o navegador vai reclamar. Se for o Mozila, clique em "entendo os riscos". Aqui poderíamos tentar colocar um apache para rodar e servir como proxy, e talvez colocar um certificado nele. Se alguém já fez isso (acho que o Tony fez) me mande o link que eu coloco aqui no post. Para mim não foi um problema adicionar a exceção de segurança.


Conclusão

O objetivo foi atingido: foi possível utilizar aquele computador que estava jogado as traças para fazer um servidor de integração contínua em casa, utilizando a sua internet pessoal. Houve alguns problemas: é necessário colocar https:// e acrescentar a porta no final da url e por conta do certificado, o servidor reclamar. Mas enfim, fiquei satisfeito com o resultado.

Com esse setup agora eu posso, junto com o Dênis, acessar o Jenkins remotamente, até mesmo do celular, para poder demonstrar um deploy com um clique em nossa palestra sobre entrega contínua(http://www.slideshare.net/RenzoNuccitelli/python-brasilentrega-contnua ) sem sobrecarregar a rede do evento (isso quando ela existe ;D)

Espero que vocês tenham gostado desse quitute que preparamos na receita de hoje. Entrem em contato, sugestões são sempre bem vindas.

Abs,
Renzo Nuccitelli


PS: MOMENTO REVOLTA: Ei Net, vai tomar no toba! Procurei saber sobre o bloqueio de portas e dizem que é por questão de segurança. Mas aí acho um link no reclame aqui: (http://www.reclameaqui.com.br/3775039/net-tv-e-banda-larga-virtual/porta-80-bloqueada-para-conexoes-entrantes/). Ou seja, se pagar por um ip fixo, aí pode desbloquear a porta 80, não tem problema com vírus?. Enfim, sei que com isso eles querem evitar que você utilize uma conexão doméstica para servir um site. Mas se eu pago pela velocidade, simplesmente deviam liberar. Pode deixar que eu tomo conta do vírus no meu próprio pc.

Assim se cria uma oportunidade para se ganhar dinheiro em cima da babaquice de uma empresa. A próprio no-ip consegue fazer um proxy reverso para você, permitindo acesso na porta 80 ou 443. Basta pagar e fazer a configuração: http://www.noip.com/support/knowledgebase/getting-started-with-no-ip-com/. O preço fica em 14,95 doletas. Afinal, ser extorquido para ter que fazer um net empresas de mais de R$ 200,00 é o fim da picada: (http://www.reclameaqui.com.br/774534/net-tv-e-banda-larga-virtual/venda-de-ip-fixo-por-9-00-adicionais-na-fatura/). Olhá aí a maravilha de letra miúda dizendo que planos de 10 e 20 mega não incluem ip fixo: http://www.netcombo.com.br/empresas/banda-larga.

Enfim, fica um link que recebi do Luciano Ramalho que aborda bem o assunto, indo ainda mais além: http://terramagazine.terra.com.br/silviomeira/blog/2013/10/28/liberdade-dinheiro-neutralidade/ #marco-civil-internet

domingo, 27 de outubro de 2013

Quanto você Quer, o Universo conspira em seu favor - Parte 4

No início de 2002 nos reunimos no CN 3 semanas antes do início das aulas. A primeira semana era utilizada para que os oficiais passassem instruções aos oficiais-alunos e adaptadores. Nessa ocasião conhecemos o novo Comandante do Corpo de Alunos (COMCA): Capitão de Corveta Luiz Antônio, vulgo Calcinha.

Como comentei no post anterior, a idéia do comando era aumentar a disciplina e logo o COMCA passou a nova voga (rotina): trotes não seriam mais admitido e severamente punidos. Além disso, a chegada dos novos alunos deveria ser tranquila, sem gritaria e confusão, diferente de nossa adaptação.

Nos meus dois primeiro anos os alunos eram divididos em 5 Companhias, cada uma contendo 3 pelotões. Dessa maneira, os 22 oficiais-alunos eram:
  • O Comandante-aluno (01)
  • O Imediato-aluno (02)
  • 5 Comandantes de Companhia (Comcia)
  • 15 Comandantes de pelotão (Compel)

Contudo, além da mudança do COMCA, uma mudança estrutural ocorreu. Foi criada a sexta companhia, talvez para ficarmos mais adequados à forma como era a organização na Escola Naval. Sendo assim, com a nova companhia, surgiram mais 4 vagas para oficial-aluno (OfAl), que passaram a totalizar os 26 primeiro colocados.

Eu havia sido o 22o e por conta disso seria o Comandante do 3 pelotão da quarta Companhia. Isso era excelente para mim: eu tinha feito parte da 4a Companhia no primeiro ano e seu responsável era o Tenente Alexandre, que como já comentei em um post, era boleiro e eu tinha me tornado peixe dele nos dois anos anteriores.

Tudo acertado na primeira semana, partimos para o CIAGA para receber os novos alunos. Foi uma experiência ímpar retornar àquele lugar, dessa vez como caçador e não como caça. Nessa posição, você já procura pelas presas que destoam no grupo de ovelhas. Observamos os adaptandos se despedindo de seus familiares antes do embarque.

No meu ônibus estava o Tenente Reis, o Mario Gomes e eu. O Mário Gomes era mais que uma “mãe”, era uma “avó”, então não pretendia de maneira ser escroto. Mas nem precisava ser. Eu tinha sido criado na Divisa de Santos, era acostumado a zuação maldosa dos amigos, então não perderia a oportunidade de proporcionar aos novos alunos muitas das “agradáveis” experiências que passei durante minha própria adaptação.

E nas boas vindas durante o embarque, repeti o mesmo que tinham feito comigo 2 anos atrás. Com o ônibus ainda no CIAGA, eu disse aos adaptandos: “Vamos lá pessoal, cumprimentem seu familiares, você são motivo de orgulho!”. Quando o ônibus saiu da Organização Militar e virou na Avenida Brasil, a voga logo mudou, falei em tom agressivo: “Ok pessoal, agora vocês podem fechar as janelas. Eu sou o oficial-aluno 3022 Nuccitelli, quem esquecer disso está fudido. A partir de agora você tem direito a falar apenas 3 coisas: Sim Senhor, Não Senhor e Quero ir de baixa”. Logo após essa boa vinda, carteei um e perguntei: “Qual meu número e meu nome?”. Gaguejou e eu logo esculachei: “Você está de sacanagem aluno, não limpou essa merda dessa orelha, eu acabei de falar isso”.

Vendo isso, alguém riu. Todos adaptandos usavam uma roupa padrão: calça jeans e camiseta branca de algodão. Mas não o Biro Biro, aluno que riu. Ele usava uma camisa azul com lista laranja horizontal. Ele tinha o cabelo igual o do antigo jogador do Corinthians e por isso o apelidamos assim. Então sentei ao seu lado e perguntei se estava achando engraçado. O rebarbado respondeu que sim e eu anotei o nome dele. Falei: “Você vai retirar esse sorriso da cara rapidinho”. Ele continuou rindo. Então fiz a promessa: “Ok, você já está convocado para todos pelotões elétricos durante a adaptação”.

Entreguei o livro “Nossa Voga” para o pessoal. Nele existiam informações sobre o CN e também os hinos que eles tinha que aprender. Já durante a viagem, os adaptandos iam cantando o hino do CN (colocar link aqui despois). Eu dando todo o “apoio” necessário para que eles cantassem cada vez mais alto.

Chegando no Naval, meu ônibus foi o último a entrar. Observei que meus amigos tinham “cagado” para a instrução da chegada tranquila ao CN. Não perdi tempo: “Todo mundo fora desse ônibus, quem for o último estará junto com o Biro Biro em todos os pelotões elétricos, só quero o último!”. Foi engraçado ver a turma correndo desesperada, tropeçando em mala, assim como havia ocorrido comigo.

Logo depois que levamos os alunos ao alojamento, o COMCA mandou reunir todo mundo e deu a maior mijada. Mas eu posso te falar que pra todo mundo aquela bronca valeu mais do que a pena.

No alojamento do primeiro ano, ficavam dois terceiro-anistas para manter a ordem. Eu gostava muito da idéia de liderar, por isso tinha estudado par ser OfAl. Assim, me ofereci para ficar como responsável pelo primeiro ano e convenci o Pirula a fazer o mesmo.

Durante as noites, ocorria o famigerado Pelotão Elétrico. Basicamente os adaptadores montavam uma lista com alunos lanceiros (lance é fazer algo errado) e a turma ficava fazendo Ordem Unida (marchar e movimento marciais) enquanto o resto podia descansar. Me lembro de passar em um deles e ver o Biro Biro, que como eu tinha prometido, já estava escalado desde o CIAGA. Perguntei para ele: “E aí Biro Biro, ainda com vontade de rir?” e a resposta foi imediata: “Não senhor”. O sistema fazia todo mundo se enquadrar rapidamente.

A adaptação seguia e a “integração” continuava. Tenho que confessar que eu era filho da puta, mas era engraçado, até mesmo para os alunos que estavam se ferrando. Me lembro de entrar no banheiro do primeiro ano e era aquela correria. Um monte de gente descalça nos chuveiros. Cara, era um banheiro comunitário para 230 alunos. Não pensei duas vezes: “Banheiro sentido!”. Coloquei a porra do banheiro todo em sentido, olhá que merda, um bando de macho no banheiro parado em posição de sentido. Perguntei: “Quem dos senhores urina na porra do box do chuveiro?”. Resposta em uníssono: “Ninguém senhor!”. Então argumentei “Mas eu mijo nessa merda todo dia. Seu porcalhões, quem está descalço, pode ir colocar a gueta (chinelo) agora, antes que peguem uma micose!”. A galera riu e foi colocar o chinelo. Eu seguia sempre essa linha: um filho da puta engraçado.

Lembro de outra vez em que eu estava com o mesmo uniforme do pessoal, o GDP, uniforme de educação física. Assim, era difícil me diferenciar dos boys. Eu tinha mandado todo mundo tomar banho e estava me dirigido a ala das camas. Passa um do meu lado dizendo baixinho para outro “Caguei pro Renzo, vou tomar banho não”. “Aluno sentido! Ta de sacanagem seu sujismundo, essa merda de alojamento já está fedendo e você não quer tomar banho, vai tomar banho agora!!!”. Cara, pra um moleque de 19 anos ter todo esse poder era muito foda.

Mas então uma mudança aconteceu. Por alguma razão, o pessoal tinha errado no cálculo das notas dos alunos. Ao perceber isso, uma nova classificação foi gerada. Eu passei a ser o OfAl 3025. Ou seja, faria parte da primeira Companhia, cujo responsável era o Tenente Anselmo, que não costumava ser muito agradável com os alunos.

Mas o pior não foi isso. Com a mudança, alguns companheiros deixaram de ser oficial-aluno. O pior caso foi o do Daniel Gama. Ele estava morando em Manaus com os pais e retornou só por conta de ser ComPel. Foi uma tremenda lambança que acabou me desmotivando e a alguns companheiros. A única coisa “boa” foi que descontamos a frustração nos primeiro-anistas. Eles já tinham decorado o número de todos ao alunos, e tiveram que redecorar tudo.

Mas a vida continuou. Certa noite eu e o Pirula estávamos batendo um papo e vimos uma sombra se dirigindo ao banheiro. Chegando lá, vimos um aluno e gritamos “Sentido”. Quando vi quem era, falei: “Grande Biro Biro!”. O Pirula sempre foi um cara tranquilo, mas não sei o que deu nele naquela hora. Ele perguntou pro Biro Biro: “Boyzão, você veio aqui dar uma barrigada certo?”. Quando ouvi ele fazendo isso, já logo entendi o que ia acontecer. Sempre ouvimos sobre um trote das antigas chamado “lavagem cerebral”: a turma enfiava a cabeça do aluno na privada e dava descarga. O Pirula prosseguiu: “Pode escolher a porra do banheiro mais sujo nesse banheiro”. Ele escolhei um e eu complementei a maldade: “Então, você vai dar a barrigada nesse banheiro, não vai dar a descarga. Quando acabar, nós vamos enfiar sua cabeça aí e só então daremos a descarga”. Cara, ele estava na posição de sentido nesse momento. Os olhos primeiro brilharam e a quando ele piscou, as lágrimas caíram. Com voz de choro, ele disse: “Senhor, por favor, não faz isso comigo não”. Obviamente que a gente não ia fazer aquilo. Primeiro porque a gente não era tão escroto assim. Segundo porque se alguém descobrisse, era expulsão na certa. O lance era todo era o terror psicológico. Mas então eu respondi: “Biro Biro, eu vou te acochambrar, mas isso vai ter um preço. A partir de hoje você vai se tornar o cara mais na marca (certinho) do seu ano. Eu vou te tirar dos pelotões elétricos, mas se você der algum outro lance, aí você estará fudido”.

Cara, eu olho para trás, lembro disso e penso: cara, que filho da puta de merda eu era. Por isso, gostaria de aproveitar o blog para pedir desculpas publicamente ao Biro Biro. Mesmo sendo eu muito novo, acho que isso não é desculpa para eu ter feito uma covardia dessas. O pior desse sistema de merda foi durante a visitação dos pais. O Biro Biro vem em minha direção, com sua irmã e mãe, me apresenta e diz: “Esse é o oficial-aluno 3025 Nuccitelli, ele que me ensinou a ser homem na Marinha”. Cara, me lembro de rir disso junto com meus amigos. Mas como um sistema pode alienar as pessoas dessa maneira, era para aquele cara me odiar e no entanto, ele achava que eu tinha feito bem para ele. Ele nunca deveria ter pedido para não fazermos aquilo, ele deveria ter nos denunciado na hora. Mas enfim, o sistema todo o faz se conformar, seguir ordem quase sempre sem questionar. De toda forma mais uma vez, peço desculpas pela imbecilidade.. Felizmente, depois disso tudo, até ficamos amigos durante o restante do ano.

Mas então a chegou segunda semana da adaptação. Nesse período era comum alunos do terceiro ano oferecem aos primeiro-anistas itens “marafeiros”, ou seja, itens que permitiam aos alunos "se mostrarem" como militares, principalementa para a mulherada. Como empreendedor, eu me adiantei e fui o primeiro a ofertar aos alunos uma camisa marefeira do bad boy fardado de 5.5 abraçado com uma menina. Ninguém era obrigado a comprar, e deixamos isso bem claro. A galera comprava, como eu comprei no primeiro ano, porque realmente os itens eram legais de se ter. Foi um sucesso.

Mas havia um “pequeno detalhe”: comércio a bordo era proibido. Mas a atividade era padrão e ocorria não só na adaptação. Durante o ano tinha gente que vendia carteira da Marinha, sapato, mala com símbolo da aviação navao e até havia a “indústria do chocolate”, com a qual a gente estimava que o Anatoli, da 98, deveria ter feito muito dinheiro.

Nos últimos dias de adaptação, as coisas ficavam mais tranquilas. Os adaptadores já tinham gastado a energia nos primeiros dias e realmente começávamos a fazer amizade com os alunos. Nesse clima, fazíamos uma brincadeira: uma votação entre os adaptandos para elegerem categorias de adaptadores:
  • Quem foi o mais filho da puta
  • Quem foi o mais mãe
  • Quem era o mais retardado

Eu fiquei em segundo na votação de mais filho da puta, perdi para o Beyler. Mas o clima estava tranquilo e teve gente até me sacaneando: “Ele coloca essa bronca de filho da puta mais parece o menino da bala Juquinha” . Durante essa descontração, eu avisei para turma da qual era responsável o mesmo que o Gomez Muniz tinha alertado 2 anos atrás: “Então gente, tenho uma notícia boa e uma ruim. A boa é que a adaptação está terminando. A ruim é que esse foi o período fácil. Se vocês acharam que fui filho da puta, vocês estão enganados. Você verão que eu sou um cara tranquilo, nem vão perceber minha presença durante o ano. Isso porque aqui na adaptação estão só os alunos gente boa da minha turma. Quando chegar o restante da turma, aí sim será um inferno”. Um aluno perguntou: “Senhor, você está brincando né?” ao que respondi: “Infelizmente não”.

E realmente, quando as aulas começaram eu realmente já tinha ficado parceiro do pessoal e não aplicaria nenhum trote durante todo ano. Isso por algumas razões: já tinha tirado todo o “recalque” na adaptaçao e também porque durante os trotes do início do ano muita gente era pega com a boca na butija e punida com finais de semana a bordo ou até expulsos. Fora isso nas experiências com o novo COMCA já percebemos que agora não haveria a moleza de antes, o bicho realmente ia pegar.

No primeiro dia de aula, mais uma lambança ocorreu. Quando refizeram a classificação, erraram novamente. Então, durante a primeira parada, refizeram a lista. Mais alguns amigos que passaram a adaptação inteira como OfAl deixaram de sê-lo e isso foi muito triste. Eu passei a ser o Oficial-Aluno 3024, me tornando o comandante do 3o pelotão da 6a Companhia. Apesar disso, a vantagem foi que o responsável dessa companhia era o então Tenente Serafim, um dos oficiais mais íntegros e vibrões que conheci no CN.

Enfim, as coisas continuavam muito bem, mas isso iria mudar no segundo semestre. Mas isso fica para o próximo post...

Abs,

 Renzo Nuccitelli

quarta-feira, 23 de outubro de 2013

Microarquitetura Python para a Camada de Negócio: GaeBusiness



Todos os exemplos nesse post são simples de implementar. Não estou interessado na dificuldade da implementação, somente na arquitetura. Todo o código se encontra em https://github.com/renzon/gaebusiness-explanation. Dividi o post em passos e vc pode conferir o código inteiro baixando desse repositório e rodando o comando:
"git checkout n", onde n é o número do passo.

Passo 1

O que eu mais gosto em desenvolvimento de software é pensar na arquitetura, em como organizar seu processo de desenvolvimento e projeto para obter uma boa produtidade de sua equipe, ao mesmo tempo em que produz software com qualidade.

Quando estava desenvolvendo o Pic Pro (Digital do Vale), estudei e implementei o Domain Driven Development (DDD), mas da maneira errada. Eu criava meus módulos baseado em entidades de domínio centrais e dentro desses eu usava um MVC. Até certo ponto do projeto, essa se mostrou uma boa organização.

Mas como sempre, satisfação com arquitetura não dura muito. Eu colocava todo meu negócio nos meus handlers web, o que no DJango  chamam de Views. Isso se tornava um problema, na medida em que a lógica de web se misturava com a lógica de negócio. Com isso, ficava difícil reutilizar regras de negócio.

 Como exemplo, vamos construir um código para salvar um usuário:

def index(_write_tmpl, name=None):
    url = router.to_path(index)
    users = User.query_all().fetch()
    if name:
        user = User(name=name)
        user.put()
        users.insert(0, user)
    values = {'form_url': url, 'users': users}
    _write_tmpl('templates/form.html', values)


Observando a função você pode perceber que da linha 4 à 6 está a lógica de salvamento do usuário,  misturada à de obtenção de valores para renderização do template HTML. Isso se torna um problema quando você quer salvar o usuário de outra forma, por exemplo, com uma chamada AJAX:
def save_user(_resp, name):
    user = User(name=name)
    user.put()
    js = json.dumps(user.to_dict())
    _resp.write(js)

Então você nota que está sendo utilizada e bela técnica de reutilização de código "Ctrl+C Ctrl+V" nas linhas 2 e 3. O problema disso é que você viola o princípio Don't Repeat Yourself (DRY).

Passo 2

O exemplo simples do que pode acontecer em um projeto grande sendo feito com essa metologia de Programação Orientada à Gambiarra (POG) é o seguinte: com a evolução do projeto, surge a necessidade de logar toda vez que o usuário é salvo. Quero manter o exemplo simples, mas um requisito ainda mais crítico seria decrementar o número de licenças disponíveis do sofware.

Utilizando a arte da POG, o desenvolvedor faz uma busca no código e encontra o save_user e, corretamente, implementa a funcionalidade:

def save_user(_resp, name):
    user = User(name=name)
    user.put()
    logging.info("Saving %s" % user)
    js = json.dumps(user.to_dict())
    _resp.write(js)

Aí ele acha que implementou o requisito por completo e manda para produção. Se fosse o caso do número de licenças, a maravilha dessa alteração é que se o usuário fosse salvo pelo formulário HTML em vez do AJAX, a licença não seria contabilizada. Parece brincadeira isso, mas já vi projeto que salvava usuário de umas 3 maneiras diferentes, cada qual com suas regras próprias.

Passo 3


 Comecei a estudar sobre como resolver o problema, e gostei muito de um keynote do Uncle Bob em um envento Ruby:  Arquitetura: os Anos Perdidos. Apesar de ser uma crítica ao Rails, a carapuça serviu em mim direitinho.

 Inspirado pela idéia, passei e implementar uma fachada para minha camada de negócios. Dessa maneira, eu respeitaria o DRY, evitando o problema de duplicação de código. Eu sei que uma fachada deve ser apenas uma interface que delega suas funções a pacotes internos, mas por brevidade, violei o padrão nesse exemplo:
#Fachada
def save_user(name):
    user = User(name=name)
    user.put()
    logging.info("Saving %s" % user)
    return user  
#Ajax
def save_user(_resp, name):
    user = facade.save_user(name)
    js = json.dumps(user.to_dict())
    _resp.write(js)

#HTML
def index(_write_tmpl, name=None):
    url = router.to_path(index)
    users = User.query_all().fetch()
    if name:
        user = facade.save_user(name)
        users.insert(0, user)
    values = {'form_url': url, 'users': users}
    _write_tmpl('templates/form.html', values)

Dessa maneira, separo lógica do meu negócio totalmente da apresentação. Não importa se a saída vai ser HTML, XML, JSON ou qualquer outro. Aliás, não precisa nem ser uma aplicação web para que você possa reutilizar suas regras de negócio. Seria possível fazer uso das mesmas regras para implementar um Desktop.

Passo 4

Seguindo nessa linha, suponha um novo requisito onde se quisesse salvar em banco um log com hora, log esse percente a um outro módulo qualquer. E isso somente quando o usuário fosse salvo através do html. Para isso, seguiriamos o mesmo caminho, fazendo uma fachada para meu novo módulo e orquestrando as funções no meu handler:

#Fachada de Log
def save_user_log(name):
    log = SaveUserLog(user=name)
    log.put()
    return log
#HTLM
def index(_write_tmpl, name=None):
    url = router.to_path(index)
    users = User.query_all().fetch()
    if name:
        user = facade.save_user(name)
        log_facade.save_user_log(name)
        users.insert(0, user)
    values = {'form_url': url, 'users': users}
    _write_tmpl('templates/form.html', values)

Passo 5


Porém, como já mencionei, satisfação com arquitetura não dura muito. O que acontece nessa abordagem, e com o princípio DRY em geral, é o problema da perfomance. Uma das característica interessantes do Google App Engine é que ele possui várias APIS assíncronas e métodos para otimizar acesso ao banco de dados. Entre eles, salvar entidades de uma só vez no banco é mais eficiente do que salvar uma a uma. Tendo isso em mente, esse esquema simples de fachada é bem reutilizável, mas a performance fica degradada, uma vez que não se tem como salvar todas entidades ao mesmo tempo.

O que eu gostaria era de continuar com essa fachada, mas também queria poder orquestrar chamadas assíncronas, de forma que elas pudessem ocorrer em paralelo, otimizando o tempo de resposta para minhas requisições. Além disso, eu gostaria de poder deixar, quando possível, para salvar minhas entidades todas de uma vez.

 Para chegar nesse objetivo, eu criei o GaeBusiness, disponivel  via comando "pip install gaebusiness". Nesse framework eu fiz uso intensivo do padrão Template:

class Command(object):
    def __init__(self, **kwargs):
        self.errors = {}
        self.result = None
        for k, v in kwargs.iteritems():
            setattr(self, k, v)

    def __add__(self, other):
        return CommandList([self, other])

    def add_error(self, key, msg):
        self.errors[key] = msg

    def set_up(self):
        '''
        Must set_up data for business.
        It should fetch data asyncrounously if needed
        '''
        pass

    def do_business(self, stop_on_error=True):
        '''
        Must do the main business of use case
        '''
        raise NotImplementedError()

    def commit(self):
        '''
        Must return a Model, or a list of it to be commited on DB
        '''
        return []

    def execute(self, stop_on_error=True):
        self.set_up()
        self.do_business(stop_on_error)
        ndb.put_multi(to_model_list(self.commit()))
        return self

O construtor da classe Command recebe os parâmetros a serem processados. O método set_up faz as chamadas assíncronas. O método do_business executa a regra de negócio e, por fim, o método commit retorna entidades que devem ser salvas no banco de dados ao fim do processo. Já o método execute orquestra toda a operação.

Além dessa classe, também foi criada a classe CommadList, que é uma lista de comandos que implementa o padrão Composite . Assim, é possível tratar um lista de comandos do mesmo jeito que um comando único. Repare também que em Command eu sobrecarreguei o operador de adição para que se possa somar comandos, cujo resultado é um CommandList. Dessa maneira, usando essa arquitetura, temos o projeto refatorado:
#Comando para salvar usuário
class SaveUserCmd(Command):
    def __init__(self, name):
        Command.__init__(self, name=name)

    def do_business(self, stop_on_error=True):
        self.result = User(name=self.name)

    def commit(self):
        return self.result
#Fachada do usuario
def save_user(name):
    return SaveUserCmd(name)
#Comando para salvar log
lass SaveUserLogCmd(Command):
    def __init__(self, name):
        Command.__init__(self, name=name)

    def do_business(self, stop_on_error=True):
        if not self.name:
            self.add_error('name', 'Name is required')
        else:
            self.result = SaveUserLog(user=self.name)

    def commit(self):
        return self.result
#Fachada do Log
def save_user_log(name):
    return SaveUserLogCmd(name)
#handler ajax refatorado
def save_user(_resp, name):
    user = facade.save_user(name).execute().result
    js = json.dumps(user.to_dict())
    _resp.write(js)

#handler html refatorado
def index(_write_tmpl, name=None):
    url = router.to_path(index)
    users = User.query_all().fetch()
    if name:
        # usando sobrecarga da adicao
        cmds = log_facade.save_user_log(name) + facade.save_user(name) 
        # Tratando CommandList da mesma for que um Command
        user = cmds.execute().result 
        if not cmds.errors:
            users.insert(0, user)
    values = {'form_url': url, 'users': users}
    _write_tmpl('templates/form.html', values)

Dessa maneira, eu tenho uma solução Orientada a Objetos para poder fazer polimorfismo com os comandos, definindo as estapas a serem executadas e, principalmente, podendo compor comandos mais complexos a partir de comandos mais simples. É isso que eu queria dizer com o slide sobre módulos da minha apresentação sobre Entrega Contínua, onde faço o paralelo com peças de lego.

 Consegui, pela primeira vez, construir um módulo bacana, usando essa estrutura, com o cliente do Passwordless: https://github.com/renzon/pswdclient. Publiquei como um pacote python e só usei a fachada como interface na hora de integrar, como você pode comprovar na linha 276 desse arquivo.

Cabe ressaltar que Command e CommandList não possuem qualquer dependência externa, é apenas código Python puro. Por isso, seria possível reutilizá-lo em qualquer projeto, independente do framework que se use, como DJango ou Flask.

Enfim, o que percebi depois disso tudo é que o código ficou mais reutilizável, mas programar ficou um pouco mais burocrático. Seria bom saber também a sua opinião, já que você teve paciência de ler esse post todo: o que você acha? Deixe seus comentários =D



 Abs,
 Renzo Nuccitelli