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

Digite a linha de comando abaixo e pressione Enter

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

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

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.

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:

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.

No próximo post, vamos criar uma pequena solução de teste e compilar via TeamCity integrado ao GitHub.
[]’s
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á:
-
-
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.

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.

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


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

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

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

Vamos criar nosso projeto de Build. Clique em Create Project

Project Criado

No próximo post, iremos configurar o Git e integrá-lo ao TeamCity.
Até logo
[]’s
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:
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
Não tem jeito, IBM é IBM. Vejam o vídeo.
Quem quiser conferir, http://manyeyes.alphaworks.ibm.com/manyeyes/
[]’s
Fabio Margarito
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
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…

Só de pensar que em 1997 eu usava um link de 56 kb e ficava feliz com download a 5kbs.
[]’s
Fabio Margarito
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ã””

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

Pronto, agora consigo entrar no gerenciador de relatórios sem problemas..
Espero que seja útil para alguém.
[]’s
Fabio Margarito
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:
S e W, são avaliados pensando em fatores internos, e internos definimos como fatores que temos controle e podemos atuar, gerenciáveis.
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.

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
Fraquezas
Oportunidades
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.
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:
Acho que vale o exercício.
Quer aprender mais?
SWOT
[]’s
Fabio Margarito
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):
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:
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
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