Eventos, Mova-se, Uncategorized

Meu primeiro TDC – (2010 São Paulo) – A Luz no fim do túnel

Imagem

Quem já participou de alguma edição do T.D.C., sabe do que estou falando.  Através de um amigo meu (Marcos Dallagnelo) fiquei sabendo de um evento para desenvolvedores que aconteceria em São Paulo. Ao dar uma olhada na grade de palestras fiquei impressionado com a variedade de tecnologias abordadas além de nomes bem conhecidos da comunidade de desenvolvimento. Decidimos ir e participar de todos os dias (na época eram 3 dias). Saímos de Joinville-SC às 21:30 com destino a São Paulo. A viagem levou em torno de 8 horas, e próximo às 05:30 da manhã já estávamos na rodoviária do Tietê. Tomamos um banho e pegamos o metrô até a paulista.

Chegando lá, tomamos um café com aquelas moças que vendem bolinhos e copos de café na beira da avenida (achei bem barato até rsrs) e em seguida partimos para a universidade Anhembi Morumbi. Às 07:00 horas já estávamos em frente a universidade aguardando o início do evento, enquanto isso ficamos ali trocando uma ideia e fazendo um networking, foi bem legal! Eu estava com medo que o sono batesse forte durante o evento, pois oito horas de estrada deixam você desgastado.  Esse era nosso primeiro dia no TDC, sexta feira 21/08. Nesse dia participamos da trilha de testes. Fomos para o auditório principal da universidade onde ocorreu a abertura daquele primeiro dia de evento. Já de início pudemos perceber que o dia seria promissor, além do nível dos palestrantes, organização, e a variedade de tópicos abordados atenderia a todas as expectativas do público ali presente. O sono bateu? Lógico que não, era impossível estar no TDC e cochilar. Uma grande maioria dos colegas participantes comigo (presentes na sala) eram da área de testes (claro, eu estava na trilha de testes). Como sei da importância de testar bem uma aplicação, participei dessa trilha, e vi coisas fantásticas, imagina para quem é tester!

O Sábado foi a vez do .Net, aí sim já estava em casa. Foi a partir desse dia que comecei a ver a luz no fim do túnel, comecei a ver tecnologias e abordagens totalmente novas e isso empolga muito! Digo que comecei a ver luz no fim do túnel porque foi a partir daí que comecei a me dedicar em aprender ainda mais sobre a tecnologia e explorar ao máximo as ferramentas que utilizo. Vi que o que eu vinha fazendo era algo como “Martelada Designer”, fazendo tudo apenas com if, while e for. Posso afirmar que esse evento foi um marco na minha vida profissional, a partir daí passei a estar ligado em comunidades, eventos e tudo o que diz respeito a isso. Cheguei a dar palestras em universidades aqui da região e escrever alguns artigos para a revista .Net magazine (a qual devido a outros projetos me afastei temporariamente, logo volto).

Faltou o terceiro dia né, bom o terceiro dia foi o dia do Agile, para fechar com chave de ouro a mudança que vivi. Palestras que abordavam diversas perspectivas em torno da agilidade e uma demostração de coach ao final do dia foi sem dúvida espetacular. Já estamos no domingo e é hora de retornar para Joinville. Saímos as 22:30 de São Paulo e perto das 06:00 já estávamos em casa. Então um banho e voltar a realidade.

Participei do TDC 2011 em Floripa e sempre que posso estou presente nesse evento. Vale muito a pena participar de um evento como esse, você volta com outra visão do que faz no dia a dia. Recomendo.

Agora estamos com o TDC 2013 saindo do forno, eu quero estar presente nesse também, e quem puder participe, vale a pena!

Abraços!

Padrão
Eventos

Evento Técnico – #BluDotNet

Olá Pessoal,

No dia 06 de abril de 2013 acontecerá mais um evento em Blumenau da comunidade BluDotNet.  O evento contará com nomes bem conhecidos da comunidade de desenvolvedores e a grade de palestras está bem interessante! Deem uma conferida:

  • Desenvolvendo com Kinect
    por Gabriel Cardoso – Benner Sistemas/SC
  • Acceptance Test Driven Development
    por Rafael Mueller – Inventti/SC
  • ASP.NET WEB API
    por Giovanni Bassi – Lambda3/SP – MVP de C#
  • Desenvolvendo software como serviço para negócios
    por Fernando Correia – Benner Sistemas/SC
  • Adotando Continuous Delivery
    por Marcelo Oliveira e Rafael Magrin – ThoughtWorks/RS
  • Fundamentos do CQRS
    por Elemar Junior – Promob/RS – MVP de C#

Apesar de ser gratuito, as vagas são limitadas, então faça sua inscrição.

Abraço!

Padrão
.NET, Banco de Dados, Boas Práticas

LocalDb – Uma alternativa simples e rápida

Performance é um item crucial no dia a dia dos programadores. Queremos agilidade em todas as tarefas do dia a dia. Mas muitas vezes precisamos usar ferramentas que não seriam necessárias se tivéssemos alguma alternativa melhor. Na grande maioria dos casos podemos dizer que “matamos mosquito com bazuca”, ou seja temos uma ferramenta cheia de recursos e acabamnos por utilizar uma funcionalidade bem específica (e usamos sempre a mesma funcionalidade) da ferramenta.

O SQL Server é um banco de dados poderoso que vem acompanhado de uma enorme variedade de recursos para um bom gerenciamento dos dados. Na grande maioria das vezes instalamos o SQL Server apenas para ler e gravar dados, ou seja um simples repositório de dados. Só que isso tem um preço, estamos desperdiçando ciclos de CPU e memória com ferramentas que jamais usaremos.

Como uma alternativa a esse cenário a Microsoft disponibilizou uma feature do SQL Server Chamada LocalDb.

Mas o que é o LocalDb?

O Local Db é uma versão simplificada (nem por isso desprovida dos recursos principais) do Sql Server Express, voltada para os desenvolvedores afim de evitar a instalação desnecessária  de uma edição completa do SQL Server.

Vantagens:

  • Instalação rápida e simples. Versão 32 bits tem 28 MB e a versão 64 bits 33 MB;
  • Não necessita configuração e administração;
  • Suporta procedures, triggers, tipos geométricos e geográficos, e o memso suporte a T-SQL Language;
  • Reduz o consumo de memória e CPU, pois só é iniciado quando necessário e também é desligado automaticamente se deixar de ser utilizado por um tempo;
  • Não precisa de instância adicional (como o Express);
  • Instalação única para todos os usuários do computador;
  • Suporta XML,BLOB, LINQ;
  • Sem limite de conexões.

Requisitos:

  • Privilégios Administrativos para instalação;
  • 140 MB de espaço disponível;
  • .Net 4.0 (para atualizar para 4.02).

Limitações:

  • Não roda em Windows XP, Server 2003 e 2000;
  • Uma instalação de 32 bits não roda em Windows 64 bits;
  • Visual Studio 2010 RTM não suporta LocalDb;
  • Não roda em dispositivos móveis;
  • Limite do tamanho do banco em 10 GB;
  • Utiliza apenas uma CPU;

 

Bom, temos então uma opção ao desperdício de recursos quando usamos o SQL Server da maneira mais básica. Eu particularmente prefiro essa versão instalada no meu note, do que deixar diversos serviços rodando de maneira desenecessária e deixando mais tudo mais lento.

O LocalDb pode ser baixado nesse link.

Links e Referências:

http://msdn.microsoft.com/pt-br/library/hh510202.aspx

http://www.sqlcoffee.com/SQLServer2012_0004.htm

http://blogs.msdn.com/b/jerrynixon/archive/2012/02/26/sql-express-v-localdb-v-sql-compact-edition.aspx

http://blog.lambda3.com.br/2013/03/restore-com-localdb/?utm_source=feedburner&utm_medium=feed&utm_campaign=Feed%3A+Lambda3Blog+%28Blog+Lambda3%29

Abraço!

Padrão
Boas Práticas, Fundamentos, Técnicas

Design Patterns – Singleton

Olá Pessoal,

No mundo da O.O. uma das  práticas que podemos aplicar em diversos cenários são os Design patterns (ou Padrões de Projeto), que por sinal são modos de resolver problemas recorrentes e que garantem boa reutilização e também expressam de uma forma elegante a resolução de um determinado problema.

Os Design Patterns são classificados em:

  • Padrões de Criação;
  • Padrões  de Estruturas e
  • Padrões de Comportamento.

Cada uma dessas classificações acima englobam diversos tipos de padrões. Nesse post abordaremos o Design Patterns chamado Singleton. Esse Pattern é caracterizado por permitir apenas uma instância de um objeto no sistema e fornecer um ponto de acesso a essa instância, sendo caracterizado como um padrão de criação.

Existem contextos em que poderá haver a necessidade de ter esse tipo de implementação. Por exemplo com classes que possuem dados sobre o sistema, sobre um determinado dispositivo. Imagine que você esta trabalhando em uma aplicação mobile e precisa capturar algum dado do aparelho, ou atualizar determinada informação. Outro exemplo seria configurações de um aplicativo que poderiam ser solicitadas em determinados momentos da execução. Diversos são os cenários que podemos aplicar essa técnica.

O padrão Singleton também é alvo de várias discussões, alguns acham que não há necessidade de utilizar dessa forma, outros preferem combinar padrão Factory, pois poderá limitar a herança e/ou polimorfismo. Enfim, essa é uma discussão para outro momento.

Para transformar uma classe em Singleton existem 3 modificações a serem feitas na classe.

1 – Criar uma instância privada e estática dessa classe;

2 – Criar um método que seja o ponto de acesso ao único objeto criado e

3 – Tornar o construtor padrão privado.

Abaixo temos uma classe chamada Dispositivo bem simples, vamos transformá-la num Singleton. A classe possui dois atributos (Marca e Modelo) e dois métodos chamados Ligar e Desligar além da sobrecarga do método ToString Conforme figura 1.

Singleton1Figura 1 – Classe Comum de Um Dispositivo

Com a nossa classe comum, vamos fazer as três alterações citadas acima para transformá-la num Singleton. As alterações podem ser acompanhadas na figura 2.

Singleton2

Figura 2 – Classe com as alterações necessárias para atender o padrão Singleton.

A partir desse momento, a forma de utilização dessa classe deixa de ser como já conhecemos, não podemos mais instanciar um objeto dessa classe usando o operador new, isso é feito internamente pelo método getInstance que passa a ser o nosso ponto de acesso ao objeto da classe Dispositivo. Na figura 3 podemos ver como deverá ser utilizada.

Singleton3Figura 3 – Exemplo de uso

Essa é a forma que deverá ser utilizada. O método getInstance, verifica se há alguma instância já criada, caso não haja, será criada uma nova instância senão, ele retornará a instância já existente. A Figura 4 mostra o exemplo em funcionamento.

Singleton4

Figura 4 – Exemplo em execução

Bom, essa é uma forma de tratar um tipo de situação num determinado contexto, porém isso exige cuidado na aplicação ou seja, quando aprendemos sobre Design Patterns, costumamos contrair uma doença chamada “Patternite” onde queremos aplicar sempre, seja qual for o pattern. Porém o ideal é deixar que a plicação “peça” o padrão mais adequado, o desenvolvedor perceberá que aquela situação será bem tratada se for aplicado o pattern X.

Quanto ao Singleton, existe um detalhe que será comentado num próximo post, ele não é thread safe, ou seja se mais de uma thread solicitar esse objeto, teremos problemas, e existem formas de contornar essa situação que serão vistas em breve!

Abraço!

Padrão
.NET, Visual Studio

Ferramentas Microsoft gratuitas para estudantes de T.I.

Olá Pessoal,

Muita gente não sabe, mas a Microsoft disponibiliza gratuitamente em um site chamado DreamSpark, ferramentas de desenvolvimento e infra para estudantes. Essas ferramentas são disponibilizadas através de uma verificação da instituição de ensino em que o aluno frequenta. Antes de iniciar o download, será necessário encontrar a sua instituição na lista do site e prosseguir informando os dados. O processo é bem simples e rápido. Caso a sua instituição não conste na lista, uma alternativa seria a carteira internacional do estudante, trata-se de uma carteira que   tem validade em quase todos os países do mundo, será necessário desembolsar um pequeno valor e enviar seus dados e fotos para o site que emite a carteira.

Para quem pretende se destacar e aprender novas tecnologias como desenvolvimento para Windows8, games, Web essa é uma ótima chance de ter boas  ferramentas disponíveis e base de informação suficiente para o aprendizado!

Enjoy!

Abraço!

 

Padrão
Processos, Técnicas

Agilidade X Qualidade de Software

 Olá pessoal, um dia desses, a Sara Barbosa colocou a seguinte questão no twitter: “Agilidade não é o mesmo que qualidade, Qualidade não é o mesmo que agilidade ?!” Preferi não responder na hora pois essa é uma questão que envolve muitos pontos de vista, e são inúmero os fatores que podem influenciar um projeto. A interpretação que dei a essa questão é se um produto desenvolvido de forma ágil sempre terá qualidade e se um produto de qualidade significa que foi desenvolvido de forma ágil.

Bom, primeiro precisamos ter uma definição sobre o que é qualidade de software. O primeiro ponto, sobre esse assunto é, qualidade para quem? Cliente ou desenvolvedor ou ambos? Claro que o ideal é que o produto tenha qualidade para o cliente e para o desenvolvedor, pois isso resultará em bons resultados na entrega, manutenção e evolução do software.

Os processos ágeis têm como principal objetivo a adaptação as mudanças, pois sabemos que elas são inevitáveis. A partir do momento em que começamos a parar de lutar contra as mudanças e passamos a utilizá-las para atingir o nosso objetivo, teremos como resultado um produto com maior qualidade para o nosso cliente e também para os desenvolvedores. Existem práticas ágeis de desenvolvimento que contribuem muito para obter um código mais limpo, mais legível e consequentemente mais fácil de manter e evoluir. Práticas da XP (Extreme Programming) como programação em par e TDD são bons exemplos que podemos utilizar. Portanto, quando trabalhamos com processos ágeis, estamos mais próximos dos objetivos e consequentemente da qualidade do produto.

Quando temos um produto de software de boa qualidade nas mãos, não necessariamente isso significa que ele foi desenvolvido por um processo ágil. Em primeiro lugar, vamos analisar a seguinte questão: Qual é a metodologia (ou processo) de desenvolvimento mais ágil que existe? Talvez muitas coisas venham em sua mente agora, mas a resposta a essa pergunta, é o famoso DEPENDE. Por que? Porque a agilidade empregada em uma organização pode variar, ela depende do tamanho do time de desenvolvimento, depende dos recursos disponíveis, do tamanho do projeto, da presença de alguém fornecendo feedback e acompanhando o desenvolvimento do produto, etc. Para uma organização envolvida em um projeto de grande porte, geograficamente distribuído e envolvendo dezenas de desenvolvedores, talvez um RUP seja o processo mais ágil que eles consigam trabalhar, ou até mesmo um Waterfall. Nesse cenário, o caminho até o objetivo final pode ser mais oneroso, mas isso não significa que o resultado não seja um produto de boa qualidade.

Portanto, adotando processos ágeis estamos caminhando para um resultado de qualidade, tanto para o cliente quanto para o desenvolvedor, porém a agilidade não é o único caminho para se atingir a qualidade esperada num produto de software, sendo assim, qualidade não necessariamente significa agilidade.

Recomendo fortemente dar uma lida no texto produzido por Klaus Wuestefeld entitulado:  O Círculo Vicioso do Software Retranqueiro, retrata bem o cenário que vivemos no desenvolvimento de softwares.

Padrão