Arquitetura em prática

por Fabio Margarito Martins de Barros

Integração contínua com GitHub e TeamCity 6.5– parte 2

Olá pessoal,

No último post, instalamos o GIT, o TeamCity e realizamos a configuração básica do servidor de build. Em resumo temos um controle de fontes local e um servidor de build instalado. Para conseguirmos todo o fluxo da integração contínua, faz-se necessário que o servidor de build tenha acesso ao controlador de fontes remoto. O que queremos? Que o servidor de build vá até o GitHub, veja se há alterações na branch que iremos monitorar, e baixe para o controle de fontes local,(também Git) a versão alterada.

Para nos comunicarmos seguramente com Git remoto, no caso o GitHub, há duas formas, utilizando HTTPS ou  SSH. HTTPS, não é recomendável, devido a lentidão, portanto, vamos utilizar SSH e o RSA como padrão de autenticação e para isto, temos que criar uma chave privada e outra pública. A chave pública gerada será configurada no GitHub.

Para a configuração é pré-requisito que você tenha uma conta no GitHub e a geração da chave é realizada através de linha de comando. No help do GitHub, há um tutorial em inglês, mas vou colocar minha versão em nossa língua. Vamos lá.

Abra a linha de comando do Git o bash

 

image

Digite a linha de comando abaixo e pressione Enter

image

Você será questionado sobre o nome do arquivo da chave, deixe em branco e pressione Enter.

image

Agora será questionado sobre uma frase. Escolhi “github”(coloque frase que desejar) ,  na sequência pressione Enter

image

Ok chave gerada. A chave foi gerada, no meu caso em c:\users\fabio\.ssh\. Este caminho você já visualiza ao digitar o comando de geração de chaves. Lá foram gerados dois arquivos, id_rsa.pub (chave pública) e id_rsa(Chave privada). Guarde este caminho, vamos usá-lo em breve.

Entre no GitHub com seu login e senha, e no menu vá em Account Settings e depois escolha a opção SSH Public Keys.

image

 

Clique no link  Add another public key. Em Title digite um nome que identifica a chave(pode ser qualquer nome) e em key, copie o conteúdo do arquivo id_rsa.pub. Ficará conforme imagem abaixo:

 

image

Clique em Add Key e a configuração está finalizada.

Vamos testar a conexão, com o comando “ssh –t git@github.com”, pressione Enter. Será solicitada a frase que você digitou durante a configuração da chave. Se tudo der certo, receberá a tela abaixo.

image

No próximo post, vamos criar uma pequena solução de teste e compilar via TeamCity integrado ao GitHub.

[]’s

Posted: Jun 28 2011, 04:17 by fabiomargarito | Comments (70) RSS comment feed |
  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5
Filed under:

Integração contínua com GitHub e TeamCity 6.5– parte 1

Oi pessoal, tudo bem?

A pedidos, coloco aqui um passo a passo para configurar o TeamCity 6.5 com o GitHub. Depois de várias tentativas e erros, compartilhoo resultado com os amigos.

O TeamCity é um servidor de integração contínua desenvolvido pela Jebrains, a mesma empresa que apoia o dotNetArchitects e que desenvolve o renomada ferramenta de refactoring, o R#. Para quem não sabe o que é integração contínua, confira o excelente post do Fowler discorrendo sobre o assunto.

O GitHub é um hosting de fontes, que roda o Git, um controle de fontes distribuído. Para utilizar o serviço do GitHub, basta criar uma conta. Há duas modalidades, a free, ou seja, todo repositório criado será visível a todos, ou, assinar um dos planos do GitHub, e neste caso você pode criar um repositório privado e esta foi minha escolha, pois o uso para tocar alguns projetos pessoais e não gostaria de torná-los públicos no momento. Este guia serve para ambos os tipos de planos, aliás, serve para qualquer hosting de Git, e aqui vai uma diga, um brasileiro criou o CodePlane que possui plano de 9 dólares onde você pode criar repositórios ilimitados e privados. Quando descobri este hosting eu já havia configurado o GitHub.

O conjunto destes produtos é uma boa opção para você montar seu servidor de integração contínua e com fontes em modo colaborativo, seguro e eficiente.  Para não ficar exaustivo e longo, vou dividir o post em algumas partes, nesta primeira, iremos baixar e instalar os produtos necessários: Git e TeamCity. Vamos lá:

  1. Baixe e instale o Git para windows, sem segredos, next, next…

Novamente ao Next, Next até chegar a tela abaixo, onde você precisa selecionar o número da porta da interface web do servidor de Build. Eu escolhi a porta 8080.

image

Apos clicar em Next, a instalação continuará e será exibida uma tela para que você coloque mais algumas informações, eu preferi manter a configuração padrão.

image

 

Selecione a conta pela qual o servidor de build irá rodar.

image

image

 

Clique em Next e finalize a instalação. Mantenha marcada a opção “Open TeamCity Web after the installer exit” e clique em Finish

image

 

3. Configurando o TeamCity

A página inicial da interface visual do TeamCity abrirá. Aceitar o termo de licença e avance.

image

Defina um nome de usuário e senha para acesso ao TeamCity

image

Vamos criar nosso projeto de Build. Clique em Create Project

image

Project Criado

image

No próximo post, iremos configurar o Git e integrá-lo ao TeamCity.

 

Até logo

[]’s

Posted: Jun 27 2011, 04:59 by fabiomargarito | Comments (49) RSS comment feed |
  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5
Filed under:

1º Encontro Dotnetarchictects 2011

Neste sábado(15/01/2010), ocorreu o primeiro encontro presencial Dotnetarchictects com transmissão ao vivo via live meeting.

Neste encontro o  pessoal tentou um novo formato de reunião, com o objetivo de ser mais descontraído e com maior participação dos integrantes. Fizemos uma mesa redonda, colocamos alguns temas e discutimos abertamente.

O assunto principal discorrido, foi a gestão das dependências entre os objetos, mas  diversos outros surgiram, os quais posso destacar:

  • Toda dependência, deve estar explicita no construtor?
  • Existe dependência opcional? É algo comum ou algum erro de design?
  • Dependência entre objetos de domínio e objetos de infra estrutura, tem diferença? O tratamento é distinto?
  • Qual linguagem escolher? Quem decide sobre a adoção de uma nova tecnologia na empresa? Pessoas com cargos executivos tem este gabarito? Toda decisão deveria ser colaborativa?
  • Times inteiros com pessoas ruins, limitam a adoção de novos paradigmas e tecnologias?
  • Empresas precisam ter hierarquia? Como funciona uma empresa sem hierarquia? Este modelo funciona para todas as indústrias e para empresas de todos os tamanhos? Pessoas acomodadas conseguiriam trabalhar neste modelo?

Enfim, foram assuntos bem interessantes, e reforço que a participação presencial não tem preço, é bom para tudo, para fluir melhor o assunto, fazer networking, rever amigos e formar novas opiniões. Não existem argumentos certos ou errados, todos tem direito de participar e expressar a opinião.

Neste encontro, tivemos a presença de diversos amigos, como o Victor Cavalcante, recém nomeado MVP ASP.NET, devido ao seu comprometimento com a comunidade e fanatismo pelo desenvolvimento web (ama MVC, mas no fundo adora WebForms,rs..), brincadeiras a parte, parabéns,  o Giovanni Bassi, também MVP,o Vinícius Quaiato, Emanuel Brandão, Maurício Aniche(mestrando pela USP na área de testes)

Em breve, atualizo este post com a o link da gravação de nossa reunião.

 

Links Interessantes

Injeção de dependências

Growing Object-Oriented Software, Guide by Tests

[]’s

Fabio Margarito

Posted: Jan 15 2011, 18:32 by fabiomargarito | Comments (50) RSS comment feed |
  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5
Filed under:

Many Eyes, isto que é tecnologia de visualização de dados

Não tem jeito, IBM é IBM. Vejam o vídeo.

 


;hl=en">

 

Quem quiser conferir, http://manyeyes.alphaworks.ibm.com/manyeyes/

[]’s

Fabio Margarito

Posted: Oct 06 2010, 05:18 by fabiomargarito | Comments (24) RSS comment feed |
  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5
Filed under:

Artigo sobre MEF na .Net Magazine

Fala galera!

É com imenso prazer que publico mais um artigo na revista .net Magazine, pricipalmente pela parceria. Fiz com o Alexandre Santos Costa, um deficiente visual que manja tudo de .Net, um exemplo de superação. Tentamos fazer um exemplo, simples mas abrangente, para que possam ver o poder deste framework que já vem embutido no .Net 4.0

[]’s

Fabio Margarito

Posted: Oct 02 2010, 02:44 by fabiomargarito | Comments (133) RSS comment feed |
  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5
Filed under:

Agora estou com internet boa!!!!!

Acabei de adquirir o serviço virtua de 10 Mb e fiz um teste através do site http://www.speedtest.net/. Olhe que números…

image

image

Só de pensar que em 1997 eu usava um link de 56 kb e ficava feliz com download a 5kbs.

[]’s

Fabio Margarito

Posted: Sep 02 2010, 05:03 by fabiomargarito | Comments (48) RSS comment feed |
  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5
Filed under:

Problemas com Reporting Services 2008 e Windows 7 Home Premium

Quase 23 horas, e eu aqui instalando o SQL Server Reporting Services 2008. A instalação ocorreu bem, mas quando tentei abrir o gerenciador de relatórios, “””pã””

image

Ok, erro novo para mim, instalei diversas vezes o Reporting Services e isto nunca tinha acontecido,  a única diferença é que eu estou tentando instalar no Windows 7 Home Premium, o SO que que veio no note que comprei recentemente.

Depois de uma pequena pesquisa descobri o problema. Para eu poder rodar o gerenciador de relatórios do Reporting Services, é necessário que o usuário pertença ao grupo de administradores locais. Para resolver, a ação foi simples, bastou eu dar um “run as administrator”, ou “Executar como administrador” o IE. Pronto, tela de configuração.

 

image

Fui em “configurações de pasta”, em seguida “Atribuição de nova função”  e associei meu usuário a “Construtor de relatórios” e “Gerenciador de conteúdo”.

 

image

image Pronto, agora consigo entrar no gerenciador de relatórios sem problemas..

image 

Espero que seja útil para alguém.

[]’s

Fabio Margarito

Posted: Jul 25 2010, 04:13 by fabiomargarito | Comments (53) RSS comment feed |
  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5
Filed under:

Análise SWOT na avaliação de soluções de arquitetura

Estrategia Vou fugir um pouco do post técnico, e tentar escrever  sobre estratégia, e como ferramentas de análise de cenário, utilizadas para planejamento estratégico empresarial, podem nos ajudar na tomada de decisão.

Como já falei em palestras que ministrei e em conversas informais com amigos, na minha visão, o arquiteto deve escolher a melhor solução pensando em diversos  fatores, tais como: equipe, plataforma tecnológica, cultura da empresa e alinhamento com a equipe de negócios. Arquitetos devem sugerir e implementar soluções sustentáveis.

No MBA que faço na FGV na disciplina  de Estratégia Empresarial, fui exposto a uma metodologia de análise de cenários chamada SWOT, e quando me refiro a cenário, podemos falar de uma área da empresa, da empresa como um todo, da sua vida, etc…, ou seja, você foca em um escopo que deseja analisar. O objetivo da análise, é fornecer os insumos necessários para que possamos tomar uma decisão e montar um planejamento estratégico. SWOT é um acrônico e significa:

  • Strengths(forças): Características positivas, diferenciais que trazem vantagens competitivas.
  • Weaknesses(fraquezas):  Características negativas, que trazem prejuízos.

S e W, são avaliados pensando em fatores internos, e internos definimos como fatores que temos controle e podemos atuar, gerenciáveis.

  • Opportunities(oportunidades): Fatores externos que podem trazer algum tipo de oportunidade, por exemplo, uma nova lei que beneficie o mercado de software.
  • Threats(Ameaças): Fatores externos que podem colocar em jogo o cenário, por exemplo, uma versão de software que é descontinuada pelo fabricante.

O e T, são fatores que não temos controles, não gerenciáveis. A figura abaixo ilustra o quadrante gerado pela análise SWOT.

SWOT

fonte da imagem:blog sem palavras

Achei extremamente pertinente a utilização desta metodologia para tomada de decisões das mais variadas possíveis. Vou colocar um cenário já discutido em um passado não muito distante, onde uma equipe gostaria de alterar os namespaces de um framework distribuído gratuitamente. Colocamos o problema e começamos a levantar, a partir da experiência dos participantes, pontos que seriam relevantes e passíveis de classificação.

Forças

  • Framework com a cara do time.
  • Controle da versão utilizada pelos times de desenvolvimento.

Fraquezas

  • Atraso na distribuição do framework para o time de desenvolvedores.
  • Comprometimento de todos os sistemas legados que utilizam a versão nativa, pois para se enquadrarem às políticas da empresa, teriam que ser alterados.
  • Risco de inclusão de bugs
  • Quebra da licença do produto, pois o mesmo permite ler mas não alterar o código fonte.
  • O namespace possui o nome do time gestor, e caso a área seja extinta, há comprometimento do significado de negócio do namespace.
  • Necessidade de treinar um profissional que já conhece com propriedade o framework nativo.

Oportunidades

  • Não identificadas

Ameaças

  • Fornecedora do framework lançar um hotéis. Devido a customização, a equipe gestora do framework alterado, não consegue entregar a nova versão rapidamente, para, por exemplo, resolver um problema de produção.
  • Fornecedora do framework lançar uma nova versão, deixando a empresa em desvantagem competitiva em relação a outras empresas que utilizam o framework nativo.

Com os pontos colocados, foi decidido pela não alteração do namespace, visto que haviam mais ameaças e fraquezas do que pontos fortes e oportunidades. Obviamente, não foram apenas estes itens, mas um conjunto bem maior.

Para levantar os quatro quadrantes, há a necessidade de um trabalho em grupo, onde os quadrantes são exibidos e os diversos participantes apontam fatores e em conjunto, decidem em que quadrante cada fator deve ficar.

Vocês conseguem ver este tipo de análise em outros cenários? Exemplos:

  • Desenvolver em Webforms ou MVC?
  • Distribuir a aplicação(servidor web e servidor de aplicação) ou mantê-la em um único servidor?
  • VB.NET ou C#?

Acho que vale o exercício.

Quer aprender mais?

SWOT

[]’s

Fabio Margarito

Posted: Jul 04 2010, 19:58 by fabiomargarito | Comments (68) RSS comment feed |
  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5
Filed under:

Unity of work

transaction Tudo pessoal?

Outro dia uma amigo me questionou sobre a utilidade do padrão Unity of Work (para facilitar, chamarei de UoW), na visão dele, o padrão não faz sentido e teria pouca utilização. Será que não tem nenhum valor? Para não respondê-lo por e-mail, resolvi postar a resposta.

Segundo Martin Fowller o padrão UoW é definido como:

Mantains a list of objects affected by a business transaction and coordinates the writing out of changes and the resolution of concurrency problems.

em tradução livre:

Mantém uma lista de objetos afetados por uma transação de negócio, coordena a efetivação das mudanças e soluciona problemas de concorrência.

Para facilitar a compreensão do UoW, trazendo um pouco para a realidade de muitos, imagine o processo de negócio de emissão de uma nota fiscal (processo extremamente simplificado):

  • Emissão da nota fiscal
  • Baixa de itens do estoque
  • Criação de contas a receber

O processo de negócio somente será efetivado, se as três etapas forem concluídas. Como resolvemos este tipo de situação?

Geralmente abre-se uma transação no banco de dados, e se todas as etapas forem concluídas com sucesso, efetivamos a transação, caso contrário, abortamos, ou seja, voltamos ao estado anterior a transação.

O UoW é o cara que abre a transação, efetiva ou aborta, só que trabalhamos com o controle dos objetos (quais foram alterados, quais foram inseridos, excluídos , etc..).

Em um modelo orientado a objetos do nosso problema, a nota fiscal é um objeto, quando emito uma nota, no final das contas, instanciamos um objeto nota e incluímos o estado desejado (número da nota, data de emissão, lista de produtos (outro objeto),etc..) , portanto, a nota torna-se um novo objeto passível de ser persistido no banco de dados.

Se for uma alteração, basicamente retornamos os dados do banco, preenchemos um objeto do tipo nota, alteramos o estado do objeto, e este, posteriormente é persistido no banco. Com a exclusão, o processo é similar. Conseguiram ligar  a expressão “Mantém uma lista de objetos afetados por uma transação de negócio” , com o exemplo exposto? Em nosso exemplo, teríamos outros objetos que serão gerenciados pelo UoW, e por ele conhecer todos, e os respectivos estados, consegue saber se houve algo errado, e abortar, se necessário.

Para a criação de UoW, Fowller em seu artigo sugere a seguinte interface:

unitOfWorkInterface

Sacaram onde o objeto nota fiscal poderia ser incluso em cada situação?

Outro ponto importante, e faz parte da definição do UoW, é o controle de concorrência, que é outro assunto extremamente complicado e extenso, mas posso citar um exemplo:

Imagine duas pessoas, uma sem conhecimento da outra, alterando dados de um mesmo cliente, o que fazer no momento da persistência? Há algumas técnicas, como o bloqueio pessimista, ou seja, no momento que eu resgatar um cliente eu bloqueio este cliente, impedindo que qualquer outro o altere, ou , bloqueio otimista, onde faço a checagem se houve alguma alteração no momento da persistência. Enfim, implementar tudo isto não é algo tão trivial, e como o conceito padrão de projeto, é a solução para um problema recorrente, podemos imaginar que alguém já implementou isto, correto? Com certeza, vejamos alguns exemplos:

  • NHibernate, um ORM opensource bem conhecido: No NHibernate, temos o objeto Session, qual a função do Session? Ele abre a transação e monitora todos os objetos utilizados no processo de negócio.
  • Entity Framework, ORM desenvolvido pela Microsoft: No Entity Framework, temos um objeto similar ao Session do NHibernate, o datacontext.
  • DataSet do .Net Framework: Um dataset, é um banco em memória e desconectado do banco de dados, trocando em miúdos, podemos retornar dados de um banco, alteramos, incluímos dados em memória  e solicitamos que as alterações sejam persistidas.

Conclusão

Não feche os olhos aos padrões, entendê-los é importante, fazem parte do nosso dia-a-dia, e são a melhor forma de reuso de conhecimento gerado a partir do sofrimento de muitos.

Fala sério, também fica bonito em uma reunião técnica, rs…

Quer aprender mais?

[]’s

Fabio Margarito

Posted: Jun 26 2010, 03:21 by fabiomargarito | Comments (28) RSS comment feed |
  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5
Filed under:

Codificando .Net 2010 e DotNetArchitects

Ontém ocorreu o evento Codificando .Net 2010, e foi bem bacana. Cheguei logo cedo, e saí quase as 19:00. O evento inicou com o KeyNote do Facunte, sobre o Windows Phone e SilverLight 4. Como sempre a palestra do Facunte foi bem bacana, um cara bastante extrovertido e diverto. Em seguida um overview das tecnologias que chegaram em 2010, como o Visual Studio 2010, novidades do ASP.Net 4.0 e .Net Framework 4.0 com a equipe de líderes do Codificando .Net. As 14:00 teve inicío da Joint Venture entre Codificando .Net e DotNetArchitects. A equipe do Codificando nos cedeu uma sala para uma sessão aberta para discutirmos soluções de arquitetura na plataforma .Net. Foi uma discussão bem bacana, com muita gente inteligente e a participção da cúpula do time DotNetArchitects, como o Leandro Daniel, Emanuel Brandão, Vinícios Quaiato, Victor Cavalcante , Daniel Fonseca e eu. Em paralelo, o Victor estava palestrando sobre MVC e Jquery com maestria(logo que acabou nossa discussão de arquitetura, também fui conferir a palestra). A estrutura do evento foi muito bacana, muita gente(em torno de 300 pessoas) deixando de lado o fim de semana de diversão, para compartilhar conhecimentos e reencontrar amigos. Equipe Codificando, em nome do DotNetArchitects, agradecemos a oportunidade, e parabéns pelo evento.

[]’s

Fabio Margarito

Posted: Jun 20 2010, 19:47 by fabiomargarito | Comments (52) RSS comment feed |
  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5
Filed under:
Php Haber Scripti : Maltepe Bilgisayar